将JSON数据发送到WCF服务?

时间:2014-02-11 12:12:31

标签: javascript jquery json wcf rest

我有一个WCF REST服务,它有两个简单的方法。

[OperationContract]
    [WebInvoke(Method="GET",
               ResponseFormat=WebMessageFormat.Json,
               RequestFormat=WebMessageFormat.Json,
               UriTemplate = "request/{controlType}")] 
string GetJSONConfig(string controlType);

[OperationContract]
(Method = "POST", 
        ResponseFormat = WebMessageFormat.Json, 
        RequestFormat = WebMessageFormat.Json, 
        UriTemplate = "save/{jsonString}")]
 string SaveJSON(string jsonString);

第一种方法是从javascript代码调用。但是我将JSON数据发送到第二个并获得404错误。

有人遇到过这种类型的问题。

  $(document).ready(function () {

        var circle = function () {
            this.x = 100;
            this.y = 100;
            this.r = 10;
        };
        var x = new circle();
        var arr = [];
        arr.push(x);
        var jsonData = JSON.stringify(arr);

        $('#serviceCall').click(function () {
            $.ajax(
            {
                url: 'http://localhost:52506/JsonDataService.svc/save/',
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify(arr),
                processData: true,
                success: function (data) {
                    document.getElementById("data").value = data;
                },
                error: function (data) {
                    document.getElementById("data").value = data;
                }
            });
        });
    });

这是javascript代码库。

2 个答案:

答案 0 :(得分:0)

您尝试拨打POST电话的方式不正确。

我建议您创建DTO类,实际上是对JSON的投影。

如果我没弄错的话,WCF会使用DataContractSerializer自动映射它。

样品:

 [OperationContract]
 [WebInvoke(UriTemplate = "/PlaceOrder", 
  RequestFormat= WebMessageFormat.Json,   
  ResponseFormat = WebMessageFormat.Json, Method = "POST")] 
  bool PlaceOrder(OrderContract order);

如果您想要原始流,请执行以下操作:

[OperationContract(Name = “MyMethod”)]
        [WebInvoke(Method = “POST”,
         UriTemplate = “blablahblah”)]
        string Method(Stream data);

答案 1 :(得分:0)

它有点语法错误!这是正确的。

[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json,
        UriTemplate = "request/{controlType}")] 
string GetJSONConfig(string controlType);

当您使用 GET 时,您无需在大多数时间指定请求格式。因为您可以从网址调用 GET 方法。

POST

[OperationContract]
WebInvoke(Method = "POST", 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat = WebMessageFormat.Json, 
    UriTemplate = "save/{jsonString}")]
string SaveJSON(string jsonString);

在此,您无需指定UriTemplate = "save/{jsonString}",而UriTemplate = "save"将完成此任务。 .NET会自动将 jsonString 转换为JSON。您只需要从客户端发送JSON(在您的JS代码中)。我希望它对你有所帮助!