2010-03-20 89 views
2

我有一個WCF服務(稱爲「myservice.svc」),它從用戶接收消息並將其保存到數據庫。它以一個數字的形式向用戶返回一個響應。此操作如下所示:從JQuery發佈到WCF服務

[OperationContract] 
[WebGet] 
public string SubmitMessage(string message) 
{ 
    try 
    { 
    // SAVE TO DATABASE 
    return "1"; 
    } 
    catch (Exception ex) 
    { 
    return "0"; 
    } 
} 

我想從某個JQuery調用此操作。我正在使用此處顯示的方法:

$.getJSON(
    "/services/myService.svc", 
    {message:"some text"}, 
    function (data) { 
    alert("success");     
    } 
); 

奇怪的是,「成功」警報從不顯示。另外,我在我的WCF服務中設置了一個斷點,它永遠不會被觸發。我究竟做錯了什麼?

謝謝

回答

6

WebGet不應該在那裏,你不應該使用jQuery getJSON功能。該方法修改數據庫;它是一個POST方法,而不是GET

有關創建POST方法的示例,請參閱this page。主要是它涉及到將這些標頭的方法:

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

你還需要確保你的jQuery,其中包括設置contentType等領域進行呼叫正確;你打電話的方式實際上是無效的,你只是將原始文本傳遞給方法,而不是有效的查詢字符串或有效的JSON。

此外,您使用了錯誤的URL;你不想發佈到端點,你需要發佈到特定的方法,你必須將其附加到URL。同樣,鏈接頁面應該幫助解釋所有這些。

這裏有一個正確的jQuery阿賈克斯後的一個例子:

$.ajax({ 
    url: "/services/myservice.svc/SubmitMessage", 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: "{ \"message\": \"test\" }", 
    dataType: "json", 
    success: function(data) { 
     // do something 
    } 
}); 
1

除了阿龍的回答,您的網址是錯,反正。

如果這是一個WCF服務,您調用的URL不是「/services/myService.svc」;你需要調用實際的方法URL。由於以上的樣品沒有顯示你的服務的類名,我也說不清,但它通常是

/服務/服務類/方法名

使用瀏覽器瀏覽頂級服務的WSDL和發現您的方法的實際URL路徑。