■数据访问服务 几乎所有的网络服务都需要查询和更新永久性数据,不论是以简单文件,还是以相关数据库,或是以其它的存储类型存在。为了提供对数据的访问,服务框架包括ActiveX Data Objects+ (ADO+)类库。如同名字所暗示的那样,ADO+由ADO发展而来。ADO+为基于网络的应用程序和服务提供数据访问服务。图1阐明了ADO+的体系结构,表明任何数据,不论这些数据实际上如何存储的,都以XML或相关数据的格式被操作。
ADO+定义了那些链接数据仓库、对数据仓库发送命令及从中获取结果的类。这些类由受控数据提供者(managed data provider)实现。ADO+中链接和命令对象看上去和ADO中的是一样的,并且一个名为DataReader的新类提供了通过高性能API流获取结果的能力。DataReader在功能上与ADO的记录集(Recordset)是相似的,但是DataReader被设计用来最小化内存中生成的对象的数量,用以提高性能、避免垃圾积累。在.NET Framework中包含了针对Microsoft SQL Server的受控数据提供者以及可通过OLE DB访问的任何数据仓库。
ADO+的一个主要创新是引入了数据集(Dataset)。一个数据集是内存中提供数据关系图的高速缓冲区。数据集对数据源一无所知,它们可以由程序或通过从数据仓库中调入数据而被生成、填充。不论数据从何处获取,数据集都是通过使用同样的程序模板而被操作的,并且它使用相同的数据缓冲区。使用.NET平台的开发人员能够用数据集代替传统ADO中无连接的记录集。
受控数据提供者为数据仓库和数据集公开的、名为DataSetCommand的接口对象。DataSetCommand使用ADO+链接和命令从数据仓库中提取数据集,并把在数据集中发生的变化解析到数据仓库中。
就像DataReaders显示了对于相关数据的有效的流访问一样,XmlReaders显示了对XML数据的流访问。开发人员使用DataNavigator可以滚动和编辑内存中的XML文档。DataNavigator在功能上和Document Object Model (DOM)是一样的,但它更有效,并提供了能很好映射关系数据表的对象模板。ADO+为那些希望继续使用DOM作为XML对象模板而不是使用更有效的DataNavigator模板的开发人员提供了一个XMLDocument类。
图1 ADO+体系结构
■表单应用模板 从概念上讲,在服务框架的最上面是两个应用程序模板:Windows表单应用模板和网络应用程序模板。尽管本文把重点放在把Microsft.NET框架用作开发网络服务和网络应用程序的一种途径上,但框架也可用于开发较传统的基于Windows的应用程序(当然,这些应用程序也能使用网络服务)。
编写Windows客户应用程序的开发人员可使用Win表单应用程序模板以利用Windows丰富的用户接口特点,包括现在的ActiveX控件和Windows 2000的新特点,如透明的、分层的浮动窗口。开发人员会发现Win表单可编程模板和对设计阶段的支持非常直观。
Win表单利用了Microsft.NET框架 runtime以减少基于Windows的客户应用程序的开销。只要应用程序和组件是用于Win表单应用程序的,那么它们就能被框架安全模板在客户机上安全地执行。
Microsft.NET框架装配模板简化了应用程序的配制和版本化。应用程序可被配制为使用它们在编译和测试中所用的共享组件,而不是使用恰好在客户机器上安装的随便什么版本的组件,这就提高了应用程序的可靠性,减少了应用程序所支持调用的主要因素:用户接口控件和其它共享组件版本的不兼容性。
■网络应用程序模板 建立在Microsft.NET框架上网络应用程序共享一个通用应用程序模板。包含用于生成在浏览器中观看的网页的网络应用程序和网络服务。下面,笔者将详细介绍Active Server Pages+ (ASP+)的网络应用程序可编程模板,如图2所示。
ASP+是由活动服务器页面(ASP)发展而来。ASP+利用common language runtime和服务框架网络应用程序提供了一个可靠的、自动化的、可扩展的主机环境。ASP+也受益于common language runtime集成模板,简化了应用程序的配制。另外,它提供简化应用程序开发的服务(如状态管理服务)以及高水平的编程模板(如ASP+网络表单和ASP+网络服务)。
ASP+的核心是HTTP运行语言,一个高性能的用于处理基于低级结构的HTTP请求的运行语言,而基于的结构与Microsoft Internet Information Services (IIS)所提供的ISAPI结构相似。由图2可知,HTTP运行语言(HTTP runtime)负责处理引入的所有HTTP请求,并对每个请求应用程序的URL进行解析,然后把请求分配到应用程序以进行进一步的处理。HTTP 运行语言是多线程的,并异步处理请求,因此劣质的应用程序代码阻碍不了它对新请求的处理。而且HTTP运行语言假定失败必会发生,因此它通常可以自动地从访问冲突、内存泄漏、死锁等事故中恢复过来。
ASP+使用基于构件的Microsft .NET框架配制模板,因此它获得了如XCOPY配制、构件并行配制、基于XML配制等优点。ASP+另一个主要优点是,它支持应用程序的实时更新。管理员不必关掉网络服务器,甚至不用停止应用程序的运行就可以更新应用文件。应用程序文件永远不会被加锁,甚至在程序运行时文件就可以被覆盖。当文件更新后,系统会检测到文件变化,并用新的应用程序代码建立一个新的应用程序实例,然后将引入的请求传递到应用程序。当所有被现存的应用程序实例处理的未完成的请求处理完后,该实例就被销毁。
在应用程序中,HTTP请求(HTTP Request)通过HTTP模块的管道路由,最终到达请求处理程序。HTTP模块和请求处理程序是一些实现特殊接口的受控类,而这些接口是由ASP+定义的。这种管道结构使得为应用程序增加服务非常方便:只需补充一个HTTP模块。例如安全、状态管理及跟踪都被实现为HTTP模块。高级可编程模块,如网络服务和网络表单,通常被用于请求处理程序。一个应用程序能链接多个请求处理程序,每个处理程序对应一个URL,但是所有的HTTP请求都要通过同样的管道路由。
网络基本上是一个无状态模型,并且在HTTP请求间没有联系,这使得编写网络应用程序很困难,因为应用程序通常需要维护跨多个请求的状态。ASP+增强了由ASP引入的状态管理服务,以便为网络应用程序提供三种类型的状态:应用程序、会话和用户。就像在ASP中一样,应用程序状态特定于一个应用程序实例,并且不会持久。会话状态是特定于一个用户与应用程序间的会话的。与ASP会话状态不同,ASP+会话状态储存在一个独立的过程中,并且可把它配制成可以储存到一个独立的机器上。这使得会话状态当应用程序在网络群(Web farm)扩展时非常有用。用户状态类似于会话状态,但通常它不会超时,并且是永久性的。因此,用户状态对储存用户参数和其它个性化的信息是有用的。所有状态管理服务都被实现为HTTP模块,因此它们容易增加到应用程序管道中,或从中删除。
图2 ASP+网络应用模型
如果除了由ASP+提供的服务外,还需要额外的状态管理服务,那么可由第三方的模块提供。
ASP+同样提供高速缓冲服务,以改善性能。输出缓冲可完全节省网页翻译,段缓冲储存部分的网页。由于提供了相应的类,所以只要需要,应用程序、HTTP模块以及请求处理程序就可以在高速缓存中储存任意数量的对象。
下面让我们认识一下建立在ASP+可编程模块之上的两个高级可编程模块:ASP+网络表单和ASP+网络服务。
■ASP+网络表单 网络表单把基于Visual Basic表单的高生产性优点带到了网络应用程序的开发中来。网络表单支持传统的将HTML内容与脚本代码混合的ASP语法,但是它提出了一种将应用程序代码和用户接口内容分离的更加结构化的方法。引入的网络表单控件用于为封装通用用户接口元素提供了一种机制。这些新的特点使得开发工具在支持VB小应用程序的同时,也支持设计模块。
图3 ASP+网络服务
网络表单控件负责生成用户接口,典型情况是在HTML表单中。ASP+提供了一套映射传统的HTML用户接口小部件(包括列表框,文本框和按钮)的网络表单控件和一套附加的网络控件(如日历和广告转板)。这些控件的一个重要特点是,它们可以被编写以适应客户端的能力;同一网页把大范围的客户端平台和表单因素作为目标。换句话说,网络表单控件能“嗅”到正在查找表单的客户,然后返回合适的用户经验??可能是适合低级浏览器的HTML3.2或是适于IE5.0的动态HTML。
考虑到网络是一种无状态的联接模型,网络应用程序开发人员所面临的一个很复杂的问题是,他们要对用户与基于网络的接口的交互作用作出反应。网络利用ASP+的体系架构提供了一套丰富的服务,以帮助开发人员建立交互式网页。用户与网页交互作用的状态管理的复杂性被ASP+网络表单和网络表单控件隐藏起来了。对开发人员来说,提供的丰富数据绑定服务使得显示通过数据访问服务得到的数据变得非常容易。
代码与内容的分离使ASP+网页能动态地编译到受控类中,用以提高性能。每个引入的HTTP请求都被传递到一个新的网页实例中,因此开发人员不需要关心代码中的线程安全性问题。
■ASP+网络服务 ASP+网络服务体系架构为用ASP+建立网络服务提供了一个高级可编程模板。虽然建立网络服务并不需要使用网络服务平台,但是它提供许多的优点将简化应用程序的开发过程,并且它使用的编程模型对用ASP或VB工作的开发人员来说是很熟悉的。使用这个可编程模型,开发人员可以不需要理解HTTP、SOAP或其它任何网络服务规范。ASP+网络服务可编程模型如图3所示。
开发人员用ASP+生成一个扩展名为 .ASMX的文件,并把此文件配制为网络应用程序的一部分,就建立起了一个网络服务。ASMX文件包含受控类的引用,或这个类的定义。这个类是由ASP+提供的WebService类所派生的。公有的类方法在标记上WebMethod属性后,就会成为网络服务方法,把HTTP请求发送到ASMX文件中的URL后,这些方法就会被调用。你不必手工为你的网络服务建立一个契约。当被调用者发出请求时,ASP+会检查类的元数据,从而自动生成SCL文件。
客户可通过SOAP、HTTP GET和HTTP POST提交请求。对方法和参数进行编码的约定是:HTTP GET,将被编译为查询字符串;HTTP POST,将被编译为表单数据。HTTP GET和HTTP POST 的机制不如SOAP有力,但是它们使得客户在访问网络服务时不必支持SOAP。
ASP+网络服务模型假定了一个无状态服务结构。无状态结构通常比有状态结构更具可扩展性。每次收到一个服务请求后,就生成一个新对象,请求被转化为一个方法调用,当方法调用返回时对象被销毁。如果这些服务需要跨请求维护状态,那么它们将使用ASP+状态管理服务。基于ASP+的网络服务在网络应用程序模型中运行,因此它们得到了该模型的所有安全、配制和其它优点。
ASP+网络服务还提供了一个为在SCL文件中描述的网络服务生成分类的受控代理工具。代理生成器把SCL文件中描述的消息映射成受控类中的方法。代理对应用程序代码隐藏了所有的网络和引导设备,因此使用网络服务看起来就象使用其它受控代码一样。代理将优先使用SOAP链接网络服务,但是它同样支持HTTP GET和HTTP POST机制。
■结论 网络服务为在Internet上绑定应用程序提供了简单的、灵活的、基于多标准的模型,同时,最大可能地重用现存体系架构和应用程序。网络应用程序可以很容易地与本地开发的服务或已存在的服务集成在一起,而不用考虑开发平台、开发语言或使用的对象模型,以用于实现任何组成的服务或应用程序。
Microsft.NET框架为开发人员提供了一个极为方便的开发环境,从而简化了安全、可靠、可扩展、高可用性的网络服务的建立、部署和不断的发展。
<全文完>