使用ASP.Net 3.5的Ajax与Web服务开发实例
在这里我又介绍了命名空间System.Web.Script的方式确定客户端调用Web服务方法。
在AJAX中调用Web服务方法可以提高Web用户的体验,微软在ASP.NET3.5中的AJAX加入了它的新功能,新的功能可以从客户端JavaScript调用Web服务方法无刷新整个页面。AJAX技术使你能够调用服务器端的方法,没有post back。客户端脚本可以提出请求的Web方法,并可以通过数据作为输入参数的方法和数据也可以从服务器发回给客户端浏览器。
为了使你的应用程序调用的ASP.NET Web service使用客户端脚本,服务器异步通信层会自动生成的JavaScript代理类。代理类生成为每个Web服务的一个
<asp:ScriptManager id=scriptManagerId runat="server"> <SERVICES> <asp:ServiceReference Path="WebService.asmx"></asp:ServiceReference> </SERVICES> </asp:ScriptManager> |
这是下载的代理类的浏览器在网页加载时间,并提供了一个客户端对象,代理调用方法的Web服务。在调用相应的方法所产生的JavaScript的代理类。该代理类打开通信与网络服务。这些请求通过的XMLHTTP对象的浏览器异步通讯。
如下图所示,详细规定了不同的层上的客户机和服务器方面通讯框架。
如下图,是WCF和Ajax调用Web service时序图。
在上一篇文章(基于ASP.NET 3.5 Web Service 的JSON扩展应用)中已经讲过,JSON - JavaScript对象符号是默认序列化格式,使用它进行数据转换之间客户端服务器请求。您可以禁用所有目前启用的协议像HTTP-GET、HTTP-POST,甚至的XML格式的SOAP中使用的早期形式的Web服务。以下设置在Web.config文件同样也是这样使用。<SYSTEM.WEB> <WEBSERVICES> <PROTOCOLS> <CLEAR /> </PROTOCOLS> </WEBSERVICES> </SYSTEM.WEB> |
请求一个Web服务方法通过这些层面。你可以看到如何使用一种方法,要求在一个可用的代理对象和Web请求中,并由一个XMLHttp对象在客户端浏览器端运行。在服务器端,你的要求是与往常一样是由一个HTTP处理程序,发出的XML/JSON序列化。
如下图所示,asp.net 3.5调用Ajax与Web服务的类关系图。
在AJAX中使用Web服务方法包括两个步骤:第一步是,创建和定义Web服务。第二个步,是使用客户端脚本来从一个网页的服务通话方法。创建一个Web服务:
在System.Web.Scripts.Services命名空间,你可能会发现一个属性类“ScriptSrvice ”,这需要适用于Web服务类,使Web服务方法可以调用来自客户端的脚本。这将使代理生成脚本来生成一个代理对象对应于Web服务类。
同样,在相同的命名空间,可能会发现另一个属性类“ScriptMethod”,如果采用此属性为Web方法,你可以指定哪些HTTP动词是用来调用一个方法和响应形式。
此属性有三个参数描述如下:
UseHttpGet :如果设置为true,将调用该方法使用HTTP GET命令。默认值为false 。
ResponseFormat :指定是否反应将序列化的简JSON或XML 。默认值为JSON。
XmlSerializeString :指定是否所有返回类型,包括字符串类型,是为XML序列化的值将被忽略XmlSerializeString连续的响应来系列化的JSON 。
现在,创建新的Web使用ASP.NET Web Service模板在Microsoft Visual Studio 2008和修改Web服务类如下:
using System.Web.Script.Services; namespace AjaxWebService { [WebService(Namespace = "http://localhost:1382/AjaxWebService/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class Service : System.Web.Services.WebService { string myXmlData = @"<?xml version=""1.0"" encoding=""utf-8"" ?> <BOOK> </BOOK>"; /// <SUMMARY> /// This method uses JSON response formatting /// </SUMMARY> /// <PARAM name="months"></PARAM> /// <RETURNS></RETURNS> [ScriptMethod(ResponseFormat = ResponseFormat.Json)] [WebMethod] public string getNextBackupDate(int months) { return DateTime.Now.AddMonths(months).ToShortDateString(); } /// <SUMMARY> /// This method uses XML response formatting /// </SUMMARY> /// <RETURNS></RETURNS> [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] [WebMethod] public XmlDocument GetBookTitle() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(myXmlData); return xmlDoc; } /// <SUMMARY> /// This method uses HTTP-GET protocol to call it /// </SUMMARY> /// <RETURNS></RETURNS> [ScriptMethod(UseHttpGet = true)] [WebMethod] public string HelloWorld() { return "Hello, world"; } } }
- 上一篇:Ajax中四种外部数据格式比较
- 下一篇:如何使用JavaScript的事件代理