启用Ajax的WCF:未收到任何数据

时间:2011-03-05 07:40:53

标签: jquery wcf

我是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”}正在发送。但功能仍然没有看到它。我可能忽略了一些非常小的东西,但我不知道是什么。我整天都在玩这个。

2 个答案:

答案 0 :(得分:0)

您从客户端发送的数据不正确。你只是发一个字符串。在WCF中,您不期望使用字符串,但是您期望复杂类型(Person)发布Person的结构,然后您的WCF应该完成工作。

using-complex-types-to-make-calling-services-less-complex可以帮助您实现自己想要的目标。 HTH

答案 1 :(得分:0)

我认为您的问题是JSON解析区分大小写,并且当您的DataMemberAttribute具有“名称”时,您正在从客户端传递“名称”。尝试更改一侧或另一侧,以便它们匹配以防万一。