【问题标题】:Consume WCF service with complex type使用复杂类型的 WCF 服务
【发布时间】:2013-07-08 04:41:30
【问题描述】:

我有这样的服务:

[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。我该如何解决这个问题?

【问题讨论】:

  • 显示您的 Person 类型定义。
  • [DataContract] public class Person { [DataMember] public string Name { get;放; } }

标签: jquery json wcf


【解决方案1】:

您的 JavaScript data 对象构造不正确 - 它应该是:{ 'person': { 'Name': 'xxxxx' } }

此外,您可以选择其他方式来构建 JavaScript 对象。解决方案(在我看来不太容易出错)是以更标准的方式构建对象(代码多一点,但混淆和出错的机会更少 - 特别是如果对象具有很高的复杂性):

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

最后一件事是,您错过了设置发送到服务操作和从服务操作发送的消息的正文样式:

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

【讨论】:

  • 我试过这个。现在它也不起作用。 DoWork(Person person) 方法参数为空。
  • 我已经编辑了答案 - 我在 data 对象构造中打错了。
  • 现在服务参数也仅为空。是否可以使用 json 格式传递参数,因为我也可以使用 java 和 antroid 访问此服务
  • 我知道这是可能的,我没说不可能。更重要的是,它应该可以工作。
  • 欲了解更多信息,请查看此处(第二段):stackoverflow.com/questions/17489707/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多