1
我試圖通過使用jQuery和WCF的結合域之間信息。這對於傳遞簡單的數據類型非常有效。這由下面的TestSimple方法演示。但是,當我使用TestComplex方法時,WCF方法不會收到任何地址參數。是否可以使用jQuery方法getJSON將複雜對象跨域傳遞給WCF服務?
希望一個例子讓我更清楚的問題:
WCF服務:
Function TestSimple(postcode As String) As BasicAddress Implements ISubmitVehicle.TestSimple
Return Test(postcode)
End Function
Function TestComplex(Address As BasicAddress) As BasicAddress Implements ISubmitVehicle.TestComplex
If Address Is Nothing Then
Return Test("Nothing")
Else
Return Test(Address.Postcode)
End If
End Function
Function Test(postcode As String) As BasicAddress
Return New BasicAddress With {
.Building = "Test", .County = "Test", .Latitude = 0, .Locality = "Test",
.Longitude = 0, .Street = "Test", .Town = "Test", .Postcode = postcode}
End Function
客戶端腳本
function TestSimple() {
var data = { postcode: "test" };
Test(data, 'TestSimple');
}
function TestComplex() {
// I also tried
//var data = { Address: { Postcode: 'test' } }
var data = {
Address: { "__type": "BasicAddress:#WPC.FADS.Web",
"Building": "Test",
"County": "Test",
"Latitude": 0,
"Locality": "Test",
"Longitude": 0,
"Postcode": "test",
"Street": "Test",
"Town": "Test"
}
}
Test(data, 'TestComplex');
}
function Test(data, method) {
$.getJSON(baseURL + 'Services/SubmitVehicle.svc/' + method + '?callback=?', data,
function (NewBasicAddress) { alert(NewBasicAddress.Postcode); })
}
數據合同:
<DataContract()>
Public Class BasicAddress
<DataMember()> Property Building As String
<DataMember()> Property Street As String
<DataMember()> Property Locality As String
<DataMember()> Property Town As String
<DataMember()> Property County As String
<DataMember()> Property Postcode As String
<DataMember()> Property Latitude As Double
<DataMember()> Property Longitude As Double
End Class
的請求˚F或TextComplex方法
GET /Services/SubmitVehicle.svc/TestComplex?callback=jQuery15107153733184290069_1329385242312&Address%5B__type%5D=BasicAddress%3A%23WPC.FADS.Web&Address%5BBuilding%5D=Test&Address%5BCounty%5D=Test&Address%5BLatitude%5D=0&Address%5BLocality%5D=Test&Address%5BLongitude%5D=0&Address%5BPostcode%5D=test&Address%5BStreet%5D=Test&Address%5BTown%5D=Test&_=1329385253384 HTTP/1.1
的TextComplex方法
jQuery15107153733184290069_1329385242312({"__type":"BasicAddress:#WPC.FADS.Web","Building":"Test","County":"Test","Latitude":0,"Locality":"Test","Longitude":0,"Postcode":"Nothing","Street":"Test","Town":"Test"});
TestSimple作品,但TestComplex沒有,就是我想實現與TextComplex可能的反應如何?
編輯
也試過沒有__type參數的建議扎克:
var data = {
Address: {
"Building": "Test",
"County": "Test",
"Latitude": 0,
"Locality": "Test",
"Longitude": 0,
"Postcode": "test",
"Street": "Test",
"Town": "Test"
}
}
工作合同:
<OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Json)>
Function TestSimple(postcode As String) As BasicAddress
<OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Json)>
Function TestComplex(Address As BasicAddress) As BasicAddress