■Microsoft.NET Framework Microsoft.NET框架的目的是使你更容易建立网络应用程序和网络服务。图2显示了Microsoft.NET框架的体系结构。建立在操作系统最上层的服务,是管理运行代码需求的Common Language Runtime,这些代码可以用任何现代编程语言所编写。Runtime提供了许多服务,这些服务有助于简化代码开发和应用程序的开发,同时也将提高应用程序的可靠性。.NET Framework包括一套可被开发者用于任何编程语言的类库。在此之上是许多应用程序模板,这些模板为开发网络站点和网络服务提供了高级组件和服务,下面笔者将逐层描述。
■Common Language Runtime 运行语言(Runtime)可以调用并运行任何编程语言所写的代码。以运行为目标的代码被称为受控(Managed)代码,受控代码只是意味着在内部可执行代码与自身代码存在已经定义好的合作契约。对于生成对象、调用方法等这样的任务,被委托给了运行语言,这使得运行语言能为可执行代码增加额外的服务。
某软件组件的多个拷贝可以存在于同样的操作系统上,然而,通常只有其中的一个拷贝能被操作系统注册、调入内存并执行。对系统来说,定位和调入内存的策略是全局性的。.NET Framework Common Language Runtime增加了所必须的体系架构以支持管理组件定位和调入的每个应用程序策略,这通常被称为并行配置。
■数据访问服务 几乎所有的网络服务都需要查询和更新永久性数据,不论是以简单文件,还是以相关数据库,或是以其它的存储类型存在。为了提供对数据的访问,服务框架包括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访问的任何数据仓库。
就像DataReaders显示了对于相关数据的有效的流访问一样,XmlReaders显示了对XML数据的流访问。开发人员使用DataNavigator可以滚动和编辑内存中的XML文档。DataNavigator在功能上和Document Object Model (DOM)是一样的,但它更有效,并提供了能很好映射关系数据表的对象模板。ADO+为那些希望继续使用DOM作为XML对象模板而不是使用更有效的DataNavigator模板的开发人员提供了一个XMLDocument类。
■网络应用程序模板 建立在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运行语言假定失败必会发生,因此它通常可以自动地从访问冲突、内存泄漏、死锁等事故中恢复过来。