美元.ajax在IE中向wcf发送空参数

本文关键字:参数 wcf 中向 ajax IE 美元 | 更新日期: 2023-09-27 18:09:22

下面是定义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)的结果为

"{"参数":{"ContactEmailAddress":"blah@gmail.com"、"LiasonsForContact":[25],"ActivityLogEntry":{"日期":"/日期(1316634966273)","LiasonFK":25岁的"TypeFK":1、"MethodFK":3,"描述":"tt"、"ContactFK":32}}}"

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

美元.ajax在IE中向wcf发送空参数

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

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

这样做之后,一切都在Internet Explorer中正常运行

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

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

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