日期:2014-02-26  浏览次数:20624 次

下载本文的代码:ASPColumn0311.exe (534KB)
  *
  本页内容
  ASP.NET 究竟是什么? ASP.NET 究竟是什么?
  ATL Server 有何不同? ATL Server 有何不同?
  ATL Server 与 ASP .NET ATL Server 与 ASP .NET
  ASPX 文件与 SRF ASPX 文件与 SRF
  “固有”对象 “固有”对象
  管理 UI 元素 管理 UI 元素
  会话状态 会话状态
  小结 小结
  
  Web 服务器的任务就是接受传入的 HTTP 请求,并返回一些对呼叫方有用的信息(不论呼叫方是人,或者是 Web 服务时的机器)。Windows 包含有处理请求的成熟结构 — IIS 及其相关扩展。但是,从头开始设计 IIS 是很单调乏味的,并且容易出错。管理 HTTP 请求的一种较好的方法就是利用位于 IIS 顶部的一种框架来管理。本月我将比较两种创建 Windows Web 应用程序的主要技术:ASP.NET 与 ATL Server。每种框架都有一些特定的优缺点。在本部分,我将集中讲述如何用 ASP.NET 管理基于 Web 的 UI。下次我将集中讲述如何利用这两种框架来构建 Web 服务及其它功能。
  ASP.NET 究竟是什么?
  
  ASP.NET 是为处理 HTTP 请求而设计的类库。除了类库,ASP.NET 还包含几个管理请求的 IIS 组件。这些组件包括名为 ASPNET_ISAPI.DLL 的 ISAPI DLL 以及名为 ASPNET_WP.EXE 的辅助进程。ASP.NET 还在 IIS 中安装了新的映射,将 ASPX、ASCX、ASHX 和 ASMX 的文件请求重定向到 ASPNET_ISAPI.DLL。至此,ASPNET_ISAPI.DLL 将请求定向到 ASPNET_WP.EXE,在该进程中,ASP.NET 加载所需要的类来为请求提供服务。
  
  以名称为 HttpContext 的托管类为中心,ASP.NET 有一个很方便的对象模型。如果您曾经写过一个标准的 ISAPI DLL,那么您一定了解包含于 EXTENSION_CONTROL_BLOCK 中并传递给 ISAPI DLL 的 HttpExtensionProc 的信息。管理请求时,ISAPI DLL 对该结构进行检查,以获得诸如环境 ID、查询字符串,以及读写客户端的函数等信息。ASP.NET 将所有这些信息都包装在 HttpContext 类中。ASP.NET 还包括管理基于 Web 的 UI(通过 System.Web.UI.Page 类)以及管理 Web 服务(通过 System.Web.Services.WebService 类和 [WebMethod] 属性)的基本类结构。
  
  ASP.NET 是面向对象的。每个通过 ASP.NET 应用程序传递的请求都由名为 IHttpHandler 的类来处理,该类可以实现接口。这样就造就了一种扩展性很强的体系结构。您可以选择利用 ASP.NET 页体系结构或 Web 服务体系结构,或者,您还可以从头编写处理逻辑。图 1 显示了 ASP.NET 请求采取的路径。
  MIissues0311ASPColumnfig01
  
  图 1 ASP.NET 请求的生命周期
  
  ASP.NET UI-处理体系结构以 Web.UI.Page 类(由 ASPX 文件表示)为中心。ASPX 文件可以包括整齐的 HTML 代码及服务器端控件。当 ASP.NET 遇到一个服务器端控件时(通过“runat=server”属性),它就实例化了一个表示该控件的类(例如,Button 和 ListBox 控件)。本质上,ASP.NET 页作为这些服务器端控件的树来处理(该页上的文本和标记被打包为 LiteralControl 类)— 其它的都是服务器端控件。当要求呈现该页自身时,该页只是遍历该控制树,“告诉”树上的每个节点呈现它们自身。ATL Server 的运作方式有些不同。
  返回页首返回页首
  ATL Server 有何不同?
  
  ATL Server 是一个用来创建 ISAPI DLL 的 C++ 模板库。当第一次创建 IIS 时,开发人员必须从头或从 MFC 的 ISAPI DLL 类作为起点来编写 ISAPI 扩展。利用原始的 C++ 或 MFC 代码生成 ISAPI DLL 需要人工编写扩展代码。例如,MFC ISAPI 没有为开发人员提供基于窗体的体系结构。任何在客户端结束的 HTML 标记都必须由人工来发出。
  
  ATL Server 将基于窗体的方法与运行时速度以及 C++ 的灵活性结合起来。利用 ATL Server 构建的 Web 站点由三个基本组件构成:服务器响应文件 (SRF)、应用程序 DLL 以及必备的 ISAPI 扩展。SRF 是 ATL Server 安装在 IIS 中的一种新型文件。SRF 映射将 IIS 指向应用程序的 ISAPI DLL,这反过来又将处理指向一个或多个应用程序 DLL。SRF 包括一种特殊的新的标记语法,它本质上是在应用程序 DLL 中调用入口点。图 2 显示了基于 ATL Server 的请求通过系统时所采用的路径。
  MIissues0311ASPColumnfig02
  
  图 2 基于 ATL Server 的请求的路径
  
  ATL Server 应用程序由许多 DLL(ISAPI 扩展和应用程序扩展)以及被称为 SRF(前面提到过)的 HTML 生成模板组成。这种体系结构很清楚地将应用程序表示和应用程序逻辑分离开来。网页的表示由包含 HTML 和特殊标记的 SRF 来定义。这些标记调用 ATL Server 应用程序 DLL。
  
  由于大多数 Web 应用程序的目标平台是 Windows,因此 ATL Server 应用程序要构建于 ISAPI DLL 之上。ATL Server 项目包含可处理粗略请求的单个 ISAPI 扩展 DLL。ATL Server 应用程序还包含用于多种精确请求处理的一个或多个应用程序 DLL。处理请求的类派生于 CRequestHandlerT,并且还包含您自己特有的、用来处理 SRF 中标记的代码。
  
  这些处理程序类包含将请求处理程序类和请求处理程序 DLL 关联起来以及将替代方法与 SRF 标记关联起来的字典。除了替代字典外,CRequestHandlerT 还包含访问标准 Web 应用程序元素的方法和成员变量,例如窗体变量、cookies、请求流以及响应流。
  
  当浏览器通过 HTTP 找到 .srf URL 时,IIS 知道用 ATL Server 应用程序的 ISAPI DLL 来打开站点。ATL Server 应用程序随后打开 SRF,并加载该