2010-01-23 136 views
0

我需要使用$ .get()從WfService.asmx文件中調用一個簡單的方法。

它正常工作與POST method.Here的方法:

[WebMethod] 
public int Sum() 
{ 
    return 10 + 10; 
} 

現在的代碼使用jQuery:

$.get('WfService.asmx/Soma',function(data){ 
alert(data.d);},"json"); 

,我得到一個錯誤信息。 我在做什麼錯?

+1

不用理會它可能是一個SOAP服務的事實 - 是嗎?你會得到什麼樣的錯誤? – 2010-01-23 02:01:51

+0

是的,這是一個SOAP服務。錯誤是這樣的:「錯誤的格式查詢字符串」。 – ozsenegal 2010-01-23 02:09:54

回答

2

爲了與SOAP Web服務通信,您必須發送符合服務定義的WSDL的格式正確的SOAP XML。除非您已明確設置ASP.NET Web服務返回JSON數據,否則您將無法在不首先創建SOAP消息的情況下發出$ .get()請求。

+0

一旦我在ASP.NET Web服務中包含了明確的JSON返回值,那麼使用JQUERY的調用是否正確? – ozsenegal 2010-01-23 02:23:25

+0

我知道這是一分鐘,但是應該是。 – 2010-03-11 23:52:17

1

要獲得使用jQuery的ASP.NET SOAP的Web服務(ASMX),你首先必須添加一個ScriptServiceAttribute(在System.Web.Script.Services找到)服務本身:

[ScriptService] // <--- here 
public class MyWebService : WebService 
{ 
    [WebMethod] 
    public int Sum(int x, int y) 
    { 
     return x + y; 
    } 
} 

如果項目不作爲一個ASP.NET AJAX項目創建,您可能需要使用以下修改web.config

<configuration> 
    <system.web> 
    <httpHandlers> 
     <remove verb="*" path="*.asmx"/> 
     <add verb="*" path="*.asmx" validate="false" 
      type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </httpHandlers> 
    </system.web> 
</configuration> 

(注 - 更新相應版本的System.Web.Extensions集引用 - 這是ASP.NET AJAX 1.0,不捲曲NT。我沒有2.0的信息,否則我會發布它)

jQuery代碼可以寫成像這樣:

$.ajax({ 
    type: "POST", 
    url: "/MyWebService.asmx/Sum", 
    data: "{x: 2, y: 5}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     $("#Result").html(msg); 
    } 
}); 

注意,這將打破依賴於XML的任何客戶端服務 - 我假設爲了這個答案,Web服務的唯一使用者將是使用jQuery或至少JavaScript的網站。如果您需要支持這兩種情況,那麼您將需要創建兩個Web服務。

+0

你讀過代碼嗎?我在談論GET請求,而不是POST.Post是沙箱。這裏的問題s:如何使用$ .get調用SOAP Web服務,另外我不想傳遞任何參數。 – ozsenegal 2010-01-23 07:19:42

+0

@ozsenegal:是的,我閱讀了代碼。 ASMX Web服務**不支持'GET'語義。**您可以使用WCF而不使用SOAP。使用Ajax'POST'代替的問題是什麼?你是什​​麼意思「沙箱?」如果你不想傳遞任何參數,那就把'data'留空。 – Aaronaught 2010-01-23 14:25:50

+0

好吧,我知道了。它會導致SOAP Web服務不支持GET請求,好。謝謝。 – ozsenegal 2010-01-23 15:19:10

0

例如張貼@Aaronaught工作,但只有一個音符=>你需要的屬性添加到您的Web服務方法:

[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)] 

例如:

[WebMethod(EnableSession = true)] 
[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)] 
public int Add(int num1,int num2) { 


    return num1 + num2; 
} 

而在你JQUERY AJAX調用你需要改變類型從POST到GET.I工作與.NET 4,我也不需要這個配置在web.config文件..

乾杯