生命周期事件和 Global.asax 文件
在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法。若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global.asax 的文件。
如果创建了 Global.asax 文件,ASP.NET 会将其编译为从 HttpApplication 类派生的类,然后使用该派生类表示应用程序。
HttpApplication 进程的一个实例每次只处理一个请求。由于在访问应用程序类中的非静态成员时不需要将其锁定,这样可以简化应用程序的事件处理过程。这样还可以将特定于请求的数据存储在应用程序类的非静态成员中。例如,可以在 Global.asax 文件中定义一个属性,然后为该属性赋一个特定于请求的值。
通过使用命名约定 Application_event(如 Application_BeginRequest),ASP.NET 可在 Global.asax 文件中将应用程序事件自动绑定到处理程序。这与将 ASP.NET 页方法自动绑定到事件(如页的 Page_Load 事件)的方法类似。有关详细信息,请参见 ASP.NET 页生命周期概述。
Application_Start 和 Application_End 方法是不表示 HttpApplication 事件的特殊方法。在应用程序域的生命周期期间,ASP.NET 仅调用这些方法一次,而不是对每个 HttpApplication 实例都调用一次。
1 在处理该请求时将由 HttpApplication 类执行以下事件。希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件。 2 3 对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。有关更多信息,请参见ValidateRequest 和脚本侵入概述。 4 5 如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。 6 7 引发 BeginRequest 事件。 8 9 引发 AuthenticateRequest 事件。 10 11 引发 PostAuthenticateRequest 事件。 12 13 引发 AuthorizeRequest 事件。 14 15 引发 PostAuthorizeRequest 事件。 16 17 引发 ResolveRequestCache 事件。 18 19 引发 PostResolveRequestCache 事件。 20 21 根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。 22 23 引发 PostMapRequestHandler 事件。 24 25 引发 AcquireRequestState 事件。 26 27 引发 PostAcquireRequestState 事件。 28 29 引发 PreRequestHandlerExecute 事件。 30 31 为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 BeginProcessRequest)。例如,如果该请求针对某页,则当前的页实例将处理该请求。 32 33 引发 PostRequestHandlerExecute 事件。 34 35 引发 ReleaseRequestState 事件。 36 37 引发 PostReleaseRequestState 事件。 38 39 如果定义了 Filter 属性,则执行响应筛选。 40 41 引发 UpdateRequestCache 事件。 42 43 引发 PostUpdateRequestCache 事件。 44 45 引发 EndRequest 事件。
Application Restarts(应用程序重新启动的次数)
修改 Web 应用程序的源代码将导致 ASP.NET 把源文件重新编译为程序集。当修改应用程序中的顶级项时,应用程序中引用顶级程序集的其他所有程序集也会被重新编译。
此外,修改、添加或删除应用程序的已知文件夹中的某些类型的文件将导致应用程序重新启动。下列操作将导致应用程序重新启动:
-
添加、修改或删除应用程序的 Bin 文件夹中的程序集。
-
添加、修改或删除 App_GlobalResources 或 App_LocalResources 文件夹中的本地化资源。
-
添加、修改或删除应用程序的 Global.asax 文件。
-
添加、修改或删除 App_Code 目录中的源代码文件。
-
添加、修改或删除配置文件配置。
-
添加、修改或删除 App_WebReferences 目录中的 Web 服务引用。
-
添加、修改或删除应用程序的 Web.config 文件。
当应用程序需要重新启动时,ASP.NET 将在重新启动应用程序域和加载新的程序集之前,从现有应用程序域和旧的程序集中为所有挂起的请求提供服务。