使用jQuery调用远程ASP.NET WebService

时间:2009-09-15 10:16:09

标签: asp.net jquery web-services

我写了一个简单的ASP.NET 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代码:

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

如果我在同一IP中托管的页面中使用此功能,则它会按预期工作。但是如果我从不同的IP(例如:127.0.0.1)访问它,那么我在IE中获得“Permission Denied”,在FireFox中获得“404 Object Not Found”。< / p>

如何使用ASP.NET编写可以从任何地方远程使用的Web服务,以及使用它的Javascript应该是什么。

我发现的每个示例都指向托管在同一项目目录中的WebService。

3 个答案:

答案 0 :(得分:2)

您无法使用其他域中的Web服务或任何Web资源(无法访问跨域Web服务)。您只能从您的域中访问资源。

相反,你可以使用Dynamic Script TagJSONP黑客技术来实现这一目标。

答案 1 :(得分:0)

在您为此Web服务提供服务的计算机上,确保Web服务器(IIS)允许远程连接。如果我没有弄错,开发Web服务器不允许远程连接,至少在默认情况下是这样。

答案 2 :(得分:0)

使用远程Web服务(那些不存在于同一网站域中)的最佳方式是通过PHP(或类似的服务器端脚本)传递请求。对于PHP,您可以按照以下步骤进行操作:

  1. 您在example.com上托管的html网页需要在example2.com中托管远程服务。

  2. 您在example.com上托管的html页面通过PROXY从位于同一example.com域的PHP脚本中读取服务:

    $ .ajax({..bla ...,url:'/ textpspts / proxy.php'});

  3. example.com上托管的/phpscripts/proxy是谁将使用CURL php库与example2.com进行通信。它将从example2.com收到一个html响应(或其他内容,取决于Web服务),然后将处理过的消息重新传输回example.com中托管的html页面。您可以使用,success(html){ }对象中的$.ajax参数在example.com中捕获此响应。