ASP.NET中的生命周期

ASP.NET应用程序

在ASP.NET中,若要对一个请求进行相应,需要应用程序执行一系列的步骤。如下图

处理请求时会让HttpApplication启动下面的事件。HttpApplication可以看做是所有应用程序的基类。

对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。

引发 BeginRequest 事件。

引发 AuthenticateRequest 事件。

引发 PostAuthenticateRequest 事件。

引发 AuthorizeRequest 事件。

引发 PostAuthorizeRequest 事件。

引发 ResolveRequestCache 事件。

引发 PostResolveRequestCache 事件。

根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler的类,对请求进行处理。 如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。

引发 PostMapRequestHandler 事件。

引发 AcquireRequestState 事件。

引发 PostAcquireRequestState 事件。

引发 PreRequestHandlerExecute 事件。

为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版IHttpAsyncHandler.BeginProcessRequest)。 例如,如果该请求针对某页,则当前的页实例将处理该请求。

引发 PostRequestHandlerExecute 事件。

引发 ReleaseRequestState 事件。

引发 PostReleaseRequestState 事件。

如果定义了 Filter 属性,则执行响应筛选。

引发 UpdateRequestCache 事件。

引发 PostUpdateRequestCache 事件。

引发 EndRequest 事件。

引发 PreSendRequestHeaders 事件。

引发 PreSendRequestContent 事件。

ASP.NET 编译周期

在第一次对应用程序发出请求时,ASP.NET按照特定的顺序进行编译。最先编译的称为顶级项。编译顺序如下。

说明
App\_GlobalResources 编译应用程序的全局资源并生成资源程序集。应用程序的 Bin 文件夹中的任何程序集都链接到资源程序集。
App\_WebResources 创建并编译 Web 服务的代理类型。所生成的 Web 引用程序集将链接到资源程序集(如存在)。
Web.config 文件中定义的配置文件属性 如果应用程序的 Web.config 文件中定义了配置文件属性,则生成一个包含配置文件对象的程序集。
App\_Code 生成源代码文件并创建一个或更多个程序集。所有代码程序集和配置文件程序集都链接到资源和 Web 引用程序集(如果有)。
Global.asax 编译应用程序对象并将其链接到所有先前产生的程序集。

编译完顶级项之后会根据请求需要,编译其他项。

说明
App\_LocalResources 如果包含被请求项的文件夹包含 App\_LocalResources 文件夹,则编译本地资源文件夹的内容并将其链接到全局资源程序集。
各个网页(.aspx 文件)、用户控件(.ascx 文件)、HTTP 处理程序(.ashx 文件)和 HTTP 模块(.asmx 文件) 根据需要编译并链接到本地资源程序集和顶级程序集。
主题、主控页、其他源文件 在编译引用页时编译那些页所引用的各个主题、主控页和其他源代码文件的外观文件。

而上述编译对象,在未更改或者依赖对象更改的情况下,在第一次编译完成后且并未重启应用程序是永远驻留在内从当中,以至于第一次访问比较慢。

ASP.NET 页面生命周期

ASP.NET页面的生存周期为如下流程。

请求—->开始—->页面初始化—->加载—->验证—->回发事件处理—->呈现—->卸载

请求:在生命周期开始之前,页面需要确定是否编译;是否需要发送缓存数据。

开始:加载一些必要的属性,例如Request、Response。并确定是否是回发请求。

页面初始化:确定空间的唯一标识符(UniqueID)。以及主题。

加载:加载以确定信息,若是回发请求,则从视图状态或者控件状态恢复控件属性。

验证:调用验证控件的Validate方法。

回发事件处理:调用该事件的处理请求。

呈现:保存该页的视图状态,并调用控件的Render方法,使控件转换成HTML语言,寄存在Response中。

卸载:当页面完全发送至客户端后,服务端将执行该页的清理。

完整流程如下图

Categories:

Updated: