2013-07-10 59 views
0

WCF服務,我有這樣的服務:消費與複合型

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "DoWork", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
    Person DoWork(Person person); 
} 

服務實現如下:

public class Service : IService 
{ 
    public Person DoWork(Person person) 
    { 
     //To do required function 
     return person; 
    } 
} 

Person類型的定義是:

[DataContract] 
public class Person 
{ 
    [DataMember] 
    public string Name { get; set; }  
} 

我嘗試使用jQuery使用此服務:

var data = { 'person': [{ 'Name': 'xxxxx'}] }; 

    $.ajax({ 
      type: "POST", 
      url: URL, // Location of the service 
      data: JSON.stringify(data), //Data sent to server 
      contentType: "application/json", // content type sent to server 
      dataType: "json", //Expected data format from server 
      processData: false, 
      async: false, 
      success: function (response) {     
      }, 
      failure: function (xhr, status, error) {     
       alert(xhr + " " + status + " " + error); 
      } 
     }); 

我可以使用此調用服務,但服務方法DoWork的參數(Person對象)始終爲NULL。我怎樣才能解決這個問題?

+0

顯示你'Person'類型定義。 – jwaliszko

+0

[DataContract] public class Person { [DataMember] public string Name {get;組; } } – user2567909

回答

1

你的JavaScript data對象被不正確地構造 - 它應該是:{ 'person': { 'Name': 'xxxxx' } }

更重要的是,你可以選擇建築的JavaScript對象的另一種方式。解決方案(在我看來不太容易出錯)是以更標準的方式構建對象(更多的代碼,但更難以混淆和犯錯 - 尤其是如果對象具有高複雜性時):

var data = new Object(); 
data.person = new Object(); 
data.person.Name = "xxxxx"; 

的最後一件事是,你錯過了建立消息的主體風格,發送到從服務操作:

[WebInvoke(... BodyStyle = WebMessageBodyStyle.Wrapped)] 
+0

我曾試過這個。現在也沒有工作。 DoWork(Person person)方法參數爲null。 – user2567909

+0

我編輯了答案 - 我在'data'對象構造中犯了一個錯字。 – jwaliszko

+0

現在服務參數也是空的。是否有可能使用json格式傳遞參數,因爲我可以使用java和antroid訪問此服務 – user2567909