浅析asp.net应用程序中Ajax异步通讯层的架构

2015-05-29 12:05刘波周圣贡
电脑知识与技术 2015年10期
关键词:架构

刘波+周圣贡

摘要:了解应用程序中异步通讯层的架构是深入理解相关内容的必要前提条件。ASP.NET程序采用AJAX时在物理上对于客户和服务器端的异步通信层是分散的。该文将针对ASP.NET 的AJAX技术进行研究,明确其异步通讯层的工作原理和体系结构。

关键词:asp.net;Ajax;异步通讯层;架构

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)10-0039-02

1 客户端的体系架构

ASP.NET应用程序中AJAX技术是在客户端实现异步通信,因此对于其客户端的体系结构将包含丰富的javascript组件来支撑其完成这些通信操作,具体组件如图1所示。在此框架体系结构图中对于ASP.NET程序的AJAX异步通讯工作核心类库及相关组件的关联有清晰的表示,众多的Javascript组件可以分为两大类:核心通信组件以及支持组件。

对于AJAX中核心的数据交互通信组件的重要作用就是对于客户端和服务器之间建立高效的通信。在图1中,WebRequest组件、Web Service代理、WebRequestManager组件、页面方法代理、以及XMLHttp-Executor组件均属于核心通信组件。

1.1 Web Service代理

在ASP.NET程序的AJAX技术开发中,服务器端的异步通讯层可以自动生成Web Service的客户端代理。然后开发者就可以在Javascript脚本中通过此Web Service代理很直接直观地对服务器端的Web Service服务方法进行调用。”代理”是指调用这类代理的语法和服务器端代码的调用语法非常类似。关于客户端的Web Service代理,与HTTP请求一样,我们可以采用GET方式和POST方式调用服务器端的Web Service方法。

POST方式:当使用超文本传输协议POST的方式调用Web Service服务时,将要发送到服务器端的数据放在HTTP请求的主体部分。(避免使用GET方式时出现在其中的请求长度限制。因此,如果没有满足GET请求长度限制的条件,可使用POST方式调用Web Service)。在POST方式中,服务器端部分(异步通信层)会将该JSON格式并提交给服务器。然后,异步通讯层的服务器端部分把该JSON格式数据进行反序列化操作并且转换成.NET中对应的类型,然后再把该数据传递给相对应的服务器端Web Service服务方法。在Web Service服务方法处理完成之后,服务器端部分(异步通讯层)会将最总的结果序列化成为JSON格式并且在经过调用函数传回给客户端,客户端部分(异步通讯层)再将它转化为对应的Javascript脚本对象,完成之后客户端的应用程序再进行进一步的业务处理。

GEST方式:使用超文本传输协议GEST方式调用Web Service的基本流程与POST方式的流程是非常类似的。区别在于,因为要将传递给服务器端的数据会放置于URL参数中,所以会受到长度上的限制。

ASP.NET AJAX异步通讯层中,客户端使用POST方式作为Web Service代理的默认调用方式,如果要使用GET方式进行调用,那么需要为Web Method添加[ScriptMethod(UserHttpget=true)]属性。

1.2 页面方法代理

与客户端的Web Service代理类似,ASP.NET AJAX异步通讯层的服务器端部分同样能够为定义在ASP.NET页面中的静态服务器端方法自动生成客户端的代理,因此也能够大大简化在客户端Javascript中的调用过程。

1.3 WebRequest组件

WebRequest组件是异步通讯层中的客户端部分的“经纪人”,用来收集发起异步HTTP请求所用到的参数,例如请求的主题部分、请求的地址、超时设定以及用户上下文信息等。一般来讲,WebRequest组件是我们使用ASP.NET AJAX异步通讯层创建并发起一次HTTP请求中唯一需要打交道的客户端组件[1]。当然,若是该HTTP请求的目标是某个Web Service或某个ASP.NET页面中的静态方法,那么则毫无疑问应该选用自动生成的Web Service或页面方法的客户端代理,这样将会更加简单。

1.4 XMLHttp-Executor组件

XMLHttp-Executor组件是异步通讯层客户端部分中最为“劳苦功高”的“实干者”,它将使用原始的XMLHttpRequest对象完成客户端与服务器端的通信工作。此外,XMLHttpExecutor类继承于WebRequestExecutor的基类,WebRequestExecutor基类给上层调用者提供了客户端与服务器端通讯工作的抽象,而WebHttpExecutor只是WebRequestExecutor的一种实现。

1.5 WebRequestManager应用组件

WebRequestManager组件是AJAX中核心的组件之一,是异步通讯层操作时客户端部分中的管理组件,为了保证异步通信流程的顺畅,我们使用WebRequestManager组件来维护并协调WebRequest组件与XMLHttpExecutor组建之间的关系。

支持组件是指对Web Service或页面方法代理进行再次封装的组件,包括身份验证代理和用户个性化代理。实现客户端/服务器端序列化功能的组件也属于支持组件,即JSON序列化组件。服务器端验证服务自动生成身份验证代理组件。通过使用这些组件,就可以在客户端用Javascript脚本以异步的方式(Ajax的方式)回送,实现用户的登录和用户注销的功能,无需完成传统方式中的一次整页回送。用户个性化代理组件是由服务器端个性化服务自动生成的。与身份验证代理组件的功能非常类似,通过使用用户个性化代理组件,就可以在客户端用Javascript脚本以Ajax异步回送的方式收集、修改或更新用户的个性化信息,同样避免了传统方式中的一次整页回送。JSON序列化组件能够把需要发送给服务器端的数据序列化成JSON格式,还能够将服务器端返回的JSON字符串解析成真正的Javascript对象。

2 服务器端架构

ASP.NET AJAX异步通信层的服务器部分包含了若干个.NET组件,与客户端部分类似,在ASP.NET AJAX异步通信层的服务器部分中,我们可以把.NET组件分为核心通信组件和支持组件两大类。

对于AJAX中核心的数据通信组件指的是用来实现和客户端进行交互所必需的.NET组件, Web Service网页服务和页面方法都属于通信组件。在ASP.NET AJAX异步通信层的服务器部分中,Web Service服务组件用来进行客户端的异步请求的处理,然后根据需要实现或调用业务逻辑代码指定的任务,并将处理结果返回给客户端。页面方法是指定义在ASP.NET页面中的服务器端静态方法。在ASP.NET AJAX异步通信层的服务器端部分中,页面方法的执行方式以及功能与Web Service非常类似。支持组件指的是实现应用程序服务的客户端代理的组件,包括用户个性化服务和身份验证服务。实现反序列化、/服务器序列化、客户端功能的组件也属于支持组件包含JSON序列化和XML序列化。身份验证组件将自动生成客户端的身份验证代理组件,让开发者可以在客户端Javascript中直接获取、修改、更新与当前请求相关的用户个性化信息[2]。用户个性化组件既可以为用户提供服务,也可以为匿名用户服务,这取决于ASP.NET中的相关设置。

服务器端的JSON序列化组件负责在常见的.NET类型与JSON字符串之间进行转换。对于某些复杂类型,我们也可以为该类型自定义JSON序列化组件。服务器的XML序列化组件负责在服务器端XmlDocument类型与XML字符串类型之间进行转换,以便使用XML格式的字符串不是默认的JSON格式字符串与客户端进行交互。

3 总结

异步通信功能是AJAX中的核心理念,本文介绍了ASP.NET AJAX异步通信层的基本架构,详细地说明了服务器端架构、异步通信层的客户端和其中的各个重要组件及其之间的关系。

参考文献:

[1] Esposito D. Microsoft ASP.NET AJAX导学[M].机械工业出版社,2008.

[2] 炎士.ASP.NET项目开发案例精粹[M].北京: 电子工业出版社,2010.

猜你喜欢
架构
基于FPGA的RNN硬件加速架构
功能架构在电子电气架构开发中的应用和实践
LSN DCI EVPN VxLAN组网架构研究及实现
一种基于FPGA+ARM架构的μPMU实现