如何从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>

如何从ajax调用WCF服务

确保请求/响应默认为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"、"内容":"你好"}}

现在我正在我的服务中接收数据。但我不明白为什么会这样。请分享原因。