我有下面的界面来定义我的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。
答案 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