使用JQuery将对象传递给WCF服务

时间:2010-10-29 08:31:14

标签: jquery wcf rest

我知道这里有一些问题要求完全相同的东西,但是尽管我读了它们,但我仍然遗漏了一些东西,希望你们可以提供帮助!

使用VS!

添加的WCF模板非常简单

接口:

[OperationContract]
[WebInvoke(Method = "POST",
    ResponseFormat = WebMessageFormat.Json,
    RequestFormat= WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped)]
CompositeType GetDataUsingDataContract(CompositeType composite);

实现:

public CompositeType GetDataUsingDataContract(CompositeType composite){
  if (composite == null)
  {
      throw new ArgumentNullException("composite");
  }
  if (composite.BoolValue)
  {
      composite.StringValue += "Suffix";
  }
  return composite;  

}

使用Javascript:

$.ajax({
  type: "POST",
  url: "http://localhost:1545/Service1.svc/GetDataUsingDataContract",
  data: JSON.stringify(compType),
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  processdata: true,
  success: function (msg) {
      $("#txtTest").val(message.BoolValue + " : " + message.StringValue);
  },
  error: function (xhr, errorMsg, thrown) {
      $("#error").html(xhr.responseText);
}

});

我得到的错误是: 服务器遇到处理请求的错误。异常消息是'值不能为空。参数名称:composite'。

因此该值未被传递,当它到达WCF服务时为null。

*注意:我已经尝试调用带有字符串并返回复合类型的方法,它可以正常工作*

请事先提供帮助

1 个答案:

答案 0 :(得分:0)

以下是构造compType的方法,以便JSON.stringify()生成服务所期望的内容:

var compType = { composite: { StringValue: "MyString", BoolValue: true } };