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

时间:2011-09-21 19:58:30

标签: c# wcf json internet-explorer ntlm

我有下面的界面来定义我的WCF服务。有时,在调用此参数时,'parameters'参数为null。其他时候不是。

[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对它进行了测试,当Fiddler打开时参数返回null,当Fiddler打开时返回null。

3 个答案:

答案 0 :(得分: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中的一切正常

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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