ASP.NET Web服务从JS调用

时间:2011-02-02 06:28:06

标签: asp.net ajax web-services asmx

我不断寻找一个关于如何使用.NET和Visual Studio 2010编写Web服务的好指南,以便我可以使用AJAX将其用于基于HTML的网站。

我知道有一种方式称为ASMX方式,但现在它更新到ServiceHost,所以我需要的是一个简单的指南,它可以帮助我了解如何使用ServiceHost对象创建asp.net Web服务。

抱歉,如果听起来含糊不清或幼稚。

1 个答案:

答案 0 :(得分:2)

ScriptManager控件放在您的页面上,并添加对.asmx服务的引用:

<asp:ScriptManager ID="myManager" runat="server">
    <Services>
        <asp:ServiceReference Path="~/MyService.asmx" />
    </Services>
</asp:ScriptManager>

在您的网络服务的代码隐藏中声明您的网络方法(请注意ScriptService属性):

namespace MyServices
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [ScriptService]
    public class MyService : System.Web.Services.WebService
    {
        [WebMethod]
        public string SayHello(name)
        {
             return "Hello, " + name;
        }
    }
}

现在您可以使用Javascript中的Web服务,如下所示:

function queryWebService() {
    MyServices.MyService.SayHello('Bobby', 
    function(result, userContext) {
        alert('Web-service response: ' + result);
    }, function(result) {
        alert('Error!');
    });
}

<强>更新

如果您只想发送HTTP GET请求来使用Web服务,那么您可以执行以下操作:

使用ScriptMethod属性装饰您的网络方法:

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string SayHello(name)
{
    return "Hello, " + name;
}

注意设置为True的{​​{3}}属性。您可能还需要修改web.config文件以允许此类交互:

<webServices>
    <protocols>
        <add name="HttpGet"/>
    </protocols>
</webServices>

现在,您可以向Web服务发出简单的HTTP GET请求,如下所示(示例使用UseHttpGet):

$.ajax({
    url: "/MyService.asmx/SayHello?name=Bobby",
    success: function(transport) {
        alert('Web-service response: ' + transport.responseText);
    }
});

希望这会对你有所帮助。

相关问题