【问题标题】:How to Call WCF service from ajax?如何从 ajax 调用 WCF 服务?
【发布时间】:2016-01-20 07:47:21
【问题描述】:

我有一个 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 调用此服务时,它收到空数据,请帮助我找出我在做什么错。

我正在发送 json 格式的原始数据,例如-

{"UserData":{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}}。

我的 web.config 条目是-

 <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)] 中明确指定

标签: c# asp.net ajax wcf


【解决方案1】:

确保默认情况下请求/响应是 Json。我会在 [WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json)]

中明确指定

也许配置一些选项like suggested here

【讨论】:

    【解决方案2】:

    您也应该使用 Wcf Rest WebHttpBinding 您将面临Cross Domain Messaging 问题。因此,您将禁用交叉消息安全或为 jsonp 创建自己的行为

    您的消息也应该是{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"} 以供您签名。 如果你想使用{"UserData":{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}},你应该把它包装起来

    【讨论】:

      【解决方案3】:

      我已经通过在我的 json 中将名称“UserData”更改为“obj”解决了问题,即更改

      {"UserData":{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}}

      {"obj":{"UserId":"1","TempId":"asdbsjiadf","Content":"Hello"}}

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多