2014-02-11 6 views
0

У меня есть служба WCF REST, которая имеет два простых метода.Отправка данных JSON в службу WCF?

[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 codebase.

+1

Во втором методе отсутствует синтаксис. [WebInvoke, если быть точным. – ZiNNED

ответ

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); 
0

Его немного синтаксической ошибки! Вот правильный.

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

При использовании GET, вам не нужно указывать формат запроса большую часть времени. Потому что вы можете вызвать метод GET из URL.

Для 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-коде). Надеюсь, это поможет!

+0

можете ли вы поделиться кодом для вызова операции SaveJSON() от клиента Javascript? – Arijit

Смежные вопросы