阶段 | 说明 |
发出一个对应用程序资源的请求。 | ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点。
在 IIS 7.0 经典模式下以及在
IIS6.0 中,ASP.NET 请求管道与 Web 服务器管道分离。模块仅应用于路由到 ASP.NET ISAPI
扩展的请求。如果请求的资源类型的文件扩展名未显式映射到 ASP.NET,则不会为该请求调用 ASP.NET 功能,因为 ASP.NET
运行库没有处理该请求。
而在 IIS 7.0 集成模式下,由一个统一的管道处理所有请求。当集成管道收到请求时,该请求将经历所有请求共有的一些阶段。这些阶段由 RequestNotification
枚举表示。所有请求都可以配置为使用 ASP.NET 功能,因为该功能封装在可以访问请求管道的托管代码模块中。例如,即使 .htm
文件扩展名未显式映射到 ASP.NET,对 HTML 页的请求仍会调用 ASP.NET 模块。这使您能对所有资源使用 ASP.NET
身份验证和授权。
|
统一管道接收对应用程序的第一个请求。 | 当统一管道接收对应用程序中的任何资源的第一个请求时,将为 ApplicationManager 类创建一个实例,该实例就是处理请求的应用程序域。应用程序域提供了应用程序之间全局变量的分离,并且使每个应用程序能够单独卸载。在应用程序域中,将为 HostingEnvironment 类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。
在第一个请求期间,如果需要,将对应用程序中的顶级项进行编译,其中包括 App_Code 文件夹中的应用程序代码。可以根据本主题后面的 IIS7.0 中的托管代码模块中的说明,在 App_Code 文件夹中包含自定义模块和处理程序。
|
将为每个请求创建响应对象。 | 在创建了应用程序域并对 HostingEnvironment 对象进行了实例化之后,将创建并初始化应用程序对象,如 HttpContext、HttpRequest 和 HttpResponse。HttpContext 类包含特定于当前应用程序请求的对象,如 HttpRequest 和 HttpResponse 对象。HttpRequest 对象包含有关当前请求的信息,包括 Cookie 和浏览器信息。HttpResponse 对象包含发送到客户端的响应,其中包括所有呈现的输出和 Cookie。
下面是 IIS6.0 和 IIS 7.0(在集成模式下,与 .NET Framework 3.0 或更高版本一起运行)之间的某些关键差异:
- 可以使用 HttpResponse 对象的 SubStatusCode 属性,设置对失败请求跟踪有用的代码。有关更多信息,请参见 Troubleshooting Failed Requests Using Failed Request Tracing in IIS 7.0(使用 IIS 7.0 中的失败请求跟踪功能解决失败请求存在的问题)。
- HttpResponse 对象的 Headers 属性提供对响应的响应头的访问。
- 在一个事件处理程序处理多个 HttpApplication 事件时,可以使用 HttpContext 对象的两个属性 IsPostNotification 和 CurrentNotification。
- HttpRequest 对象的 Headers 和 ServerVariables 属性支持写操作。
|
将 HttpApplication 对象分配给请求 | 初始化所有应用程序对象之后,将通过创建 HttpApplication 类的实例来启动应用程序。如果应用程序有 Global.asax 文件,则 ASP.NET 会创建从 HttpApplication 类派生的 Global.aspx 类的实例。然后使用该派生类来表示应用程序。
说明:
|
第一次在应用程序中请求 ASP.NET 页或进程时,将创建 HttpApplication 类的一个新实例。不过,为了尽可能提高性能,可对多个请求重复使用 HttpApplication 实例。
|