asp.net http管线-概述

本文主要介绍从 Web 服务器接受请求到完成响应期间所使用的组建和类。理解HTTP处理管线可以帮助你理解整个页面的处理过程,并可以写出高效、或者在别处不容易实现的要求。

管线中的处理请求


请求由客户端传到服务器并返回的过程中,会引发一系列事件。作为我们可以编写事件处理方法在这些事件点上与请求或者响应进行交互,编写的代码可以放在HTTP模块或者global.asax文件的脚本中。

下图说明了请求如何从HTTP管线起点流向终点,而事件处理方法将在终点处提供响应:
uploads/200708/21_195413_pipleline.gif
图1 - 处理HTTP管线中的请求

其中事件发生的顺序是:
1) Web 服务器接受请求。把对 default.aspx 资源的请求传递到 ASP.NET 工作进程(aspnet_wp.exe)。它创建 HttpRuntime 类实例,由该实例启动请求处理。
HttpContext 是请求信息的中央仓库,其他类需要访问请求信息时,可以在 HttpContext 字段或属性当中找到需要的信息,除了 HttpRequest 和 HttpResponse 外,还包括保存状态的 HttpSessionState 和 HttpApplicationState属性。
2) HttpApplicationFactory 提供 HttpApplication 对象来处理请求。创建 HttpContext 对象后,HttpRuntime 调用静态工厂方法 HttpApplicationFactory.GetApplicationInstance 来创建或发现 HttpApplication 对象,以处理请求。
3) 用过滤请求和响应的 HTTP 模块初始化 HttpApplication。当请求和响应流经管线时,将使用 HTTP 模块对其进行处理。预定义的 ASP.NET 模块提供了认证、缓存和会话状态服务。
4) 查找处理器工厂。HttpApplication 对象从 HttpRuntime 处接管了处理后,该对象将查找 HandlerFactory(处理器工厂),该工厂负责发现和创建 HTTP 处理器(handler)对象。首先检查请求的类型(.aspx),并搜索 machine.config 或 web.config,查找映射到该类型的处理器。不同的资源类型需要不同的处理器。
5) 处理器处理请求。在这个例子中,处理器来就是所请求的 .aspx 页面。这可能有点奇怪,但对处理器的基本要求是它应实现 IHttpHandler 接口,而.apsx 页面通过其 Page 类实现了该接口,所以这个页面可以作为处理器。
6) 构建并返回响应。调用处理器的 ProcessRequest 方法来产生响应。由于该方法以 HttpContext 对象为参数,所以,它能访问完成处理所需的请求信息。

当请求和响应在 HTTP 管线中移动时,会有序地发生一系列确定性事件(从 HttpApplication.BeginRequest 开始到 HttpApplication.EndRequest 事件结束),这个事件链定义了处理过程的每个阶段。另外,一些随机的错误事件可能随时因未处理异常发生。

开发人员可以有针对性地开发这些事件的处理方法,从而提供应用程序的健壮性和效率。处理方法通常用于:捕获错误事件并将他们定向到定制错误页面、记录会话长度和用户数,用户认证,以及用通用的页眉和页脚信息装饰页面。这些可以通过定制应用或者定制HTTP模块来实现。

定制管线的第三个地方是在管线终端,HTTP处理器在这个位置处理资源请求。

小结:


定制管线有三种方法
1) 通过 Global.asax 文件
2) 通过定制 HTTP 模块
3) 通过定制 HTTP 处理器
后面的Blog将分别介绍这3种方法。
posted @ 2008-05-04 11:38  老王博客  阅读(261)  评论(0)    收藏  举报