快捷搜索:   nginx

ATLServer与ASP.NET

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 请求采取的路径。

  

  
  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 的请求通过系统时所采用的路径。
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论