IIS 7.0的ASP.NET应用程序生命周期概述

小结于:http://msdn.microsoft.com/zh-cn/library/bb470252(v=vs.100).aspx

IIS 7.0的ASP.NET应用程序生命周期概述

(一)结构概述

在IIS 7.0集成模式下的请求会经历几个阶段,类似于在 IIS 6.0 中对 ASP.NET 资源的请求所经历的阶段。但是,在 IIS 7.0 中,这些阶段包含多个额外的应用程序事件,如MapRequestHandler、LogRequest 和 PostLogRequest事件。

IIS 7.0和IIS 6.0的处理阶段之间的主要区别在于ASP.NET如何与IIS服务器集成。在IIS 6.0中,有两个请求处理管道。一个管道用于本机代码ISAPI筛选器和扩展组件[IIS],另一个管道用于托管代码应用程序组件[ASP.NET管道]。在IIS 7.0中,ASP.NET运行时与Web服务器集成,这样就有了一个针对所有请求的统一的请求处理管道。对于 ASP.NET 开发人员,集成管道有以下益处:

1)集成管道引发由 HttpApplication 对象公开的所有事件,这使现有的ASP.NET HTTP Module可在 IIS 7.0 集成模式下工作。

2)在Web服务器级别、网站级别或Web应用程序级别,都可配置本机代码和托管代码模块。这包括用于会话状态、Forms身份验证、配置文件以及角色管理的内置ASP.NET托管代码模块。此外,可以为所有请求启用或禁用托管代码模块,无论请求是否针对ASP.NET资源(如 aspx 文件)。

3)可以在管道中的任何阶段调用托管代码模块。这包括在对请求进行任何服务器处理之前,在所有服务器处理都已发生之后,或者两者间的任何阶段。

4)可以通过应用程序的Web.config文件注册模块,也可以启用或禁用模块。

(二)生命周期阶段
下表列出了在 IIS 7.0 集成模式下运行的 ASP.NET 应用程序生命周期的各个阶段。


(三)使用Global.asax文件

Global.asax文件在IIS 7.0中的集成模式下的使用与在IIS 6.0的ASP.NET中的使用有诸多类似。其中一个区别是:您可以为MapRequestHandler、LogRequest 和 PostLogRequest事件添加处理程序。对于在IIS 7.0集成模式下运行并且与.NET Framework 3.0或更高版本一起运行的应用程序,可以支持这些事件。

可以在 Global.asax 文件中提供应用程序事件处理程序,以添加对 ASP.NET 资源请求(例如对 .aspx 和 .axd 页的请求)的执行代码。但是,不会调用 Global.asax 文件中的处理程序代码来处理对非 ASP.NET 资源(如静态文件)的请求。若要运行为所有资源运行的托管代码,请创建一个实现 IHttpModule 接口的自定义模块。该自定义模块将会运行,以处理对应用程序中所有资源的请求,即使资源处理程序不是 ASP.NET 处理程序。

(四)开发自定义托管代码模块(HttpModule)

可使用实现IHttpModule接口的模块来扩展 ASP.NET 应用程序生命周期,实现 IHttpModule 接口的模块为托管代码模块。可以将托管代码模块定义为应用程序的App_Code文件夹中的一个类文件。还可以将模块创建为一个类库项目,并编译该项目,然后将其添加到应用程序的 Bin 文件夹下。创建自定义模块后,必须在 IIS 7.0 中注册它,常用的方法是在Web.config文件中注册

如果某个模块在应用程序的 App_Code 或 Bin 文件夹中定义,并且已在应用程序的 Web.config 文件中注册,则此模块仅为该应用程序调用。若要在应用程序的 Web.config 文件中注册模块,可以在 system.webServer 节点中的 modules 元素中进行配置。

托管代码模块也可以在 IIS 7.0 配置存储区(ApplicationHost.config 文件)的 modules 元素中注册。在 ApplicationHost.config 文件中注册的模块具有全局范围,因为它们为所有由 IIS 7.0 承载的 Web 应用程序而注册。

原文地址:https://www.cnblogs.com/notebook2011/p/2889675.html