我的WCF服务上有以下OperationContract:
public int ProcessEntries(Entry[] entries)
{
return entries.Length;
}
我的OperationContract的界面定义如下:
[OperationContract]
[WebInvoke(
Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
int ProcessEntries(Entry[] entries);
Entry
类的定义如下:
[DataContract]
public class Entry
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
我通过jQuery调用WCF服务的OperationContract,调用如下:
$.ajax({
url: 'MyService.svc/json/ProcessEntries',
type: 'POST',
data: JSON.stringify({
entries: [
{ Id: 1, Name: 'Test1' },
{ Id: 2, Name: 'Test2' }
]
},
contentType: 'application/json',
success: function (d) { console.log(d); }
});
在Chrome开发者工具中,我看到我的请求有效负载如下:
{
"entries": [
{
"Id": 1,
"Name": "Test1"
},
{
"Id": 2,
"Name": "Test2"
}
]
}
我希望回复为2
,但我总是收到0
的回复。
我在这里做错了什么?为什么我的OperationContract认为Entry
数组的长度为0
?
编辑在调试模式下,我可以看到条目数组实际上是空的。为什么不通过反序列化请求中发送的JSON来获取条目?
最终修改我发现在我的BodyStyle = WebMessageBodyStyle.WrappedRequest
属性中添加WebInvoke
可以解决问题,但我不确定原因。任何人都可以回答这个问题吗?