【问题标题】:ASP.NET Web Service to call from JS从 JS 调用的 ASP.NET Web 服务
【发布时间】:2011-02-02 06:28:05
【问题描述】:

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

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

对不起,如果这听起来模棱两可或幼稚。

【问题讨论】:

标签: asp.net ajax web-services asmx


【解决方案1】:

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

注意UseHttpGet 属性设置为True。您可能还需要修改web.config 文件以允许这种交互:

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

现在您可以向您的网络服务发出一个简单的 HTTP GET 请求,如下所示(示例使用jQuery.ajax):

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

希望这会对你有所帮助。

【讨论】:

  • 虽然您的指南很有帮助,但我不是在寻找这样的解决方案。该服务托管在云上,Javascript 将从不同的客户端调用它们,因此我需要通过 HTTP GET 方法调用它们。我可以这样做吗?
  • 您的网页是否来自托管服务的同一(确切)主机? IE。 www.se.com 会调用 www.se.com/myservice.asmx?如果没有,那么您将遇到 XSS 问题(跨站点脚本),并且必须使用少数技术之一来解决这个问题。
  • 没有 XSS 问题,因为我是从 file:/// 调用它
  • @Volpav:我想知道你为什么不喜欢 WCF 的方式呢?
  • 因为简单。如果您看不到使用它的任何明显优势,则无需使用更复杂的技术(我不是指您的情况,因为我不了解所有方面)。 Thisthis 文章可能会帮助您以 WCF 方式进行操作。
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2012-11-25
相关资源
最近更新 更多