2011-03-05 19 views
0

我是WCF新手,請耐心等待。已啓用Ajax WCF:未收到數據

我有一個簡單的WCF服務接受這樣一個簡單的JSON數據{name:「Joe Boxer」}。應該只是回顯傳遞的名稱。


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做POST的WCF。我可以看到螢火蟲的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

您從客戶端發送的數據不正確。你只是發佈一個字符串。在WCF中,你並不期待字符串,但你期待一個複雜的類型(Person)發佈Person的結構,然後你的WCF應該完成這項工作。

using-complex-types-to-make-calling-services-less-complex應該可以幫助你實現你想要做的事情。 HTH

0

我認爲你的問題是JSON解析是區分大小寫的,而你從客戶端傳遞「名稱」,而你的DataMemberAttribute有「名稱」。嘗試改變一側或另一側,以便它們匹配以防萬一。