2009-09-15 62 views
2

我編寫了一個簡單的ASP.NET WebService預編譯並將其託管在虛擬目錄中。如果我用這個功能在同一個IP那麼它將按預期工作託管的網頁使用jQuery調用遠程ASP.NET WebService

function SayHello() { 
    var serviceURL = "http://172.42.100.47/TestService/TestService.asmx/SayHello"; 
    var requestData = "{name:'" + $('#txtName').val() + "'}"; 

    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     url: serviceURL, 
     data: requestData, 
     dataType: 'json', 
     success: function(result){ 
      alert(result.d); 
     } 
    }); 
} 

Webservice的代碼:

namespace Test.Services 
{ 
    /// <summary> 
    /// Summary description for AgentService 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    [ScriptService] 
    public class TestService : System.Web.Services.WebService 
    { 
     [WebMethod] 
     [ScriptMethod(ResponseFormat=ResponseFormat.Json)] 
     public string SayHello(string name) 
     { 
      return "Hello, " + name; 
     } 
    } 
} 

Javascript代碼訪問該Web服務。但如果我從不同的IP訪問它(例如:127.0.0.1),那麼我在IE中獲得「Permission Denied」,在FireFox中獲得「404 Object Not Found」

如何使用可以從任何地方遠程使用的ASP.NET編寫Web服務,以及應該如何使用Javascript。

我找到的每個示例都引用了託管在同一項目目錄中的WebService。

回答

2

您無法使用其他域的Web服務或任何Web資源(無法訪問跨域Web服務)。您只能從您的域單獨訪問資源。

相反,您可以使用Dynamic Script TagJSONP黑客技術來實現這一目標。

+0

爲此,從服務返回的數據應該使用JSON。我的web服務返回xml。 我寫了一個HttpHandler,然後寫了JSON到響應..它工作。 – Zuhaib 2009-09-15 13:36:49

+0

是的,這應該工作... :) – RameshVel 2009-10-08 08:57:37

0

在提供此Web服務的計算機上,確保Web服務器(IIS)允許遠程連接。如果我沒有弄錯,開發Web服務器不允許遠程連接,至少在默認情況下。

0

消費遠程Web服務(不在同一網站域中)的最佳方式是通過PHP(或類似的服務器端腳本)傳遞請求。在PHP的情況下,你可以按照這個總的步驟:託管在example.com

  1. 你的HTML頁面需要example2.com託管的遠程服務。

  2. HTML頁面託管在example.com消耗通過代理從位於同一example.com域中的PHP腳本閱讀服務:

    $阿賈克斯({..bla ...,網址: '/phpscripts/proxy.php'});

  3. example.com上的/phpscripts/proxy是誰將使用CURL php庫與example2.com進行通信。它將接收來自example2.com的html響應(或其他內容,取決於Web服務),然後將處理後的消息重新發送回您在example.com託管的html頁面。您可以使用$.ajax對象中的,success(html){ }參數在example.com中捕獲此響應。