如何从ajax调用WCF服务
本文关键字:WCF 服务 调用 ajax | 更新日期: 2023-09-27 18:18:36
我有一个WCF服务,如下-
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Sync
{
[OperationContract]
[WebInvoke]
public string SyncDataNow(UserData obj)
{
try
{
using (MavenifyEntities db = new MavenifyEntities())
{
bool userExist = db.Users.Any(u => u.Id == obj.UserId);
if (userExist)
{
DataSync data = new DataSync();
data.UserId = obj.UserId;
data.TempId = obj.TempId;
data.Content = obj.Content;
data.CreatedDate = DateTime.Now.ToString();
db.DataSyncs.Add(data);
db.SaveChanges();
return "1";
}
else
{
return "0";
}
}
}
catch (Exception ex)
{
return "error";
}
}
}
[DataContract(Namespace = "")]
public class UserData
{
[DataMember]
public int UserId { get; set; }
[DataMember]
public string Content { get; set; }
[DataMember]
public string TempId { get; set; }
}
当我从POSTMAN调用这个服务时,它接收到null数据,请帮助我找出我做错了什么
我正在发送json格式的原始数据,如-
{"用户数据":{"标识":"1","TempId":"asdbsjiadf"、"内容":"你好"}}。
我的网页。-
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="PhoneSync.SyncAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="PhoneSync.Sync">
<endpoint address="" behaviorConfiguration="PhoneSync.SyncAspNetAjaxBehavior" binding="webHttpBinding" contract="PhoneSync.Sync" />
</service>
</services>
确保请求/响应默认为Json。我会在中明确地指定[WebInvoke(RequestFormat = WebMessageFormat]。Json, ResponseFormat = WebMessageFormat.Json)
也许像这里建议的那样配置一些选项是有意义的
您也应该使用Wcf Rest WebHttpBinding
,您将面临Cross Domain Messaging
问题。因此,您将禁用交叉消息安全性或为jsonp创建自己的行为
你的信息也应该是{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}
供你签名。如果您想使用{"UserData":{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}}
,您应该将其包装
我已经解决了这个问题通过更改名称"UserData"到"obj"在我的json即更改
{"用户数据":{"标识":"1","TempId":"asdbsjiadf"、"内容":"你好"}}
{"obj":{"标识":"1","TempId":"asdbsjiadf"、"内容":"你好"}}
现在我正在我的服务中接收数据。但我不明白为什么会这样。请分享原因。