我是WCF的新手,所以请耐心等待。
我有一个简单的WCF服务,接受像这样的{name:“Joe Boxer”}这样的简单JSON数据。应该回复传递的名字。
Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports System.Runtime.Serialization
<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class Service
<Serializable()> _
<DataContract(Name:="Person")> _
Public Class Person
<DataMember(IsRequired:=True, Name:="Name")> _
Public Name As String
End Class
<OperationContract()>
<WebInvoke(requestformat:=WebMessageFormat.Json)>
Public Function GetName(ByVal p As Person) As String
Return "Your name is " & p.Name
End Function
End Class
所以,我使用JQuery AJAX和JSON2对WCF进行POST。我可以通过firebug看到传递的JSON数据。但是,GetName()方法永远不会看到传递的数据 - 使代码失败,因为p为null。
看起来这个服务看不到任何传递的数据。
我错过了什么?提前感谢您的帮助。
感谢Pradeep的回复。
我实际上发送的是复杂类型。对不起,如果没说清楚的话。这是我发送它的方式(简化)。
$.ajax( {
url: "http://localhost/wcftest/service.svc/GetName",
data: JSON.stringify({name:"Joe Boxer"}),
type: "POST",
processData: false,
contentType: "application/json; charset=UTF-8",
timeout: 10000,
dataType: "json",
success: function(res) { alert(res); },
error: function() { alert("error"); return;}
});
我可以在firebug中看到{“name”:“Joe Boxer”}正在发送。但功能仍然没有看到它。我可能忽略了一些非常小的东西,但我不知道是什么。我整天都在玩这个。
答案 0 :(得分:0)
您从客户端发送的数据不正确。你只是发一个字符串。在WCF中,您不期望使用字符串,但是您期望复杂类型(Person)发布Person
的结构,然后您的WCF应该完成工作。
using-complex-types-to-make-calling-services-less-complex可以帮助您实现自己想要的目标。 HTH
答案 1 :(得分:0)
我认为您的问题是JSON解析区分大小写,并且当您的DataMemberAttribute
具有“名称”时,您正在从客户端传递“名称”。尝试更改一侧或另一侧,以便它们匹配以防万一。