使用AJAX Extensions客户端进行Web服务调用2011-11-08 msdn Fritz Onion从根本上讲,ASP.NET 自始至终都是一项服务器端技术。当然,在某些情况下 ASP.NET 会生成客户端 JavaScript,特别是在验证控件中以及在新推出的 Web 部件基础结构中,但它通常只是简单地将客户端 属性转换成客户端行为。作为开发人员,在收到下一个 POST 请求之前不必考虑与客户端进行交互。对于 需要使用客户端 JavaScript 和 DHTML 构建更具交互性的页面的开发人员而言,则需要在 ASP.NET 2.0 脚本回调功能提供的一些帮助下自己编写代码。这一情况在去年得到了彻底改变。在 2005 年 9 月的 Microsoft 在 Microsoft 专业开发人员大会上发布了一个新的 ASP.NET 插件( 代号为“Atlas”),主要是为了充分利用客户端 JavaScript、DHTML 和 XMLHttpRequest 对 象。其目的是帮助开发人员创建更具交互性的支持 AJAX 的 Web 应用程序。此框架从此更名为正式名称 Microsoft® AJAX Library 和 ASP.NET 2.0 AJAX Extensions,它提供了许多出色的功能,包括客户 端数据绑定、DHTML 动画和行为以及使用 UpdatePanel 实现的完善的对客户端 POST 回调的拦截。这些 功能中的许多功能依赖的是以易于通过客户端 JavaScript 调用进行分析和交互的形式从服务器异步检索 数据的能力。本月专栏的主题便是这一新的非常有用的能力,即在支持 ASP.NET 2.0 AJAX Extensions 的页面中通过客户端 JavaScript 调用服务器端 Web 服务的能力。使用 AJAX 调用 Web 服务如果您曾经使用过 Microsoft .NET Framework 中的 Web 服务,无论是使用 wsel.exe 实用程序 创建代理还是使用 Visual Studio® 的“添加 Web 引用”功能,您就会习惯于使用 .NET 类型调用 Web 服务。实际上,通过 .NET 代理调用 Web 服务方法与在其他类上调用方法非常相似。代理 会根据您传递的参数准备 XML,它会妥善地将它收到的 XML 响应转换成代理方法指定的 .NET 类型。开 发人员可以非常方便地利用 .NET Framework 使用 Web 服务端点,这也使目前面向服务的应用程序变得 可行。ASP.NET 2.0 AJAX Extensions 使得在浏览器中运行的客户端 JavaScript 实现了无缝的 、与 Web 服务完全相同的代理生成体验。您可以编写一个在您的服务器上承载的 .asmx 文件,并通过一 个客户端 JavaScript 类调用该服务上方法。例如,图 1 显示了一个简单的 .asmx 服务,该服务实现了 模拟的股票报价检索(使用随机数据)。Figure 1 StockQuoteService.asmx
<%@ WebService Language="C#" Class="MsdnMagazine.StockQuoteService" %>using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;// From Microsoft.Web.Extensions.dll assemblyusing Microsoft.Web.Script.Services;namespace MsdnMagazine{ [WebService(Namespace = "http://msdnmagazine.com/ws")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class StockQuoteService : WebService { static Random _rand = new Random(Environment.TickCount); [WebMethod] public int GetStockQuote(string symbol) { return _rand.Next(0, 120); } }}