2013-07-10 23 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