日期:2012-09-13  浏览次数:20506 次

.NET框架与网络服务(下)
(作者:MSDN 2001年02月06日 10:47)

  ■数据访问服务
  几乎所有的网络服务都需要查询和更新永久性数据,不论是以简单文件,还是以相关数据库,或是以其它的存储类型存在。为了提供对数据的访问,服务框架包括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语法,但是它提出了一种将应用程序代码和用户接口内容分离的更加结构化的方法。引入的网络表单控件用于为封装通用用户接口元素提供了一种机