【问题标题】:$.ajax sends null parameters to wcf in IE$.ajax 向 IE 中的 wcf 发送空参数
【发布时间】:2011-09-21 19:58:29
【问题描述】:

下面的接口定义了我的 WCF 服务。有时,当调用它时,'parameters' 参数为空。其他时候不是。

[ServiceContract]
public interface IContactRelationshipManager
{
  [OperationContract]
  [WebInvoke(
    Method = "POST", 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped)]
  void SaveActivityLogEntry(SaveActivityLogEntryParameters parameters);
}

这是我在 app.config 中的行为部分(我将其作为 Windows 服务运行)

<behaviors>
  <endpointBehaviors>
    <behavior name="jsonBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ContactRelationshipManagerBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

这是我的 javascript 调用:

$.ajax(
{
  type: "POST",
  cache: false,
  contentType: "application/json",
  url: serviceCallUrl,
  data: JSON.stringify(params),
  success: callbackHandler
});

JSON.stringify(params)的结果是

"{"parameters":{"ContactEmailAddress":"blah@gmail.com","LiasonsForContact":[25],"ActivityLogEntry":{"Date":"/Date(1316634966273)/","LiasonFK ":25,"TypeFK":1,"MethodFK":3,"Description":"tt","ContactFK":32}}}"

在实践中我做错了什么吗?这在 chrome 和 firefox 中一直运行良好。我也刚刚在调试服务时使用 Fiddler 进行了测试,当 Fiddler 关闭时参数返回 null,而 Fiddler 打开时参数返回 null。

【问题讨论】:

    标签: c# wcf json internet-explorer ntlm


    【解决方案1】:

    我最终使用了一堆不同的技术来让它工作,包括将流作为我的函数参数并使用 JSON.NET 在函数内部对其进行序列化。那也没有用。我终于找到了这个question,这让我相信这是一个 NTLM 问题。我的网站在 IIS7 中使用 Windows 身份验证,它调用作为 Windows 服务托管的 WCF 服务。在服务器端,我将 webHttpBinding 的安全性更改为:

    <binding name="webBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" proxyCredentialType="None"
          realm="" />
      </security>
    </binding>
    

    完成此操作后,在 Internet Explorer 中一切正常

    【讨论】:

      【解决方案2】:

      例如,您可以使用 Fiddler 来嗅探实际发送的内容吗?我通常将数据对象直接传递给$.ajax 并让它处理序列化对象。我猜测字符串化的 JSON 编码不当。

      【讨论】:

      • 问题是,如果我使用 Fiddler,那么我的 WCF 服务会正确接收参数。我无法使用 Fiddler 进行测试,因为它会影响结果。
      【解决方案3】:

      我实际上没有遇到任何问题,除了在 ajax 调用中缺少一些属性之外,您拥有所有必需的配置。我不知道这是否会有所帮助。

      contentType: "application/json; charset=utf-8"
      dataType: "json"
      processData: false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-31
        • 2017-01-28
        • 2021-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多