2012-02-16 24 views
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 

回答

1

經過一番研究,我認爲答案是 「不」 。有關更多詳細信息,請參閱REST/SOAP endpoints for a WCF service

萬一別人遇到這個問題,我到底做了爲每個方法我暴露我創建了兩個業務合同:

一個可能使用「的getJSON」從跨域客戶端腳本飲用只包含簡單的參數。

一個,其中包括複雜的對象作爲參數,但不能從跨域客戶端腳本消耗。

執行操作合同的方法都調用了相同的代碼。

相關問題