.net asp 生命周期如图

[1] 客户端发送请求时提供的请求报文,在客户端发送请求时系统的Http.sys会监听发送的请求,将请求传送给iis。

注:Http.sys是位于Windows Server和Windows XP SP2中的操作系统核心组件。

此组件有存储、log记录、IP重用、将所有的请求给此的队列中传送不同负责的程序处理。

[2] 如何当请求的页面Http.sys所有缓存会直接取之于缓存,否则请求与IIS。

[3] IIS根据请求的扩展名进行判断是静态资源还是动态资源,如果是静态资源直接返回对应地址的内容,如果是动态资源会在IIS的处理程序映射中的配置找到由哪个扩展程序来处理。Asp.net一般有aspnet_isapi.dll来运行具体的请求。

[4] 在请求aspnet_isapi.dll是由W3WP.exe程序进行运行的。在aspnet_isapi中会首先调用ISAPIRuntime.ProcessRequest()方法,在此方法中会调用CreateWorkerRequest方法创建HttpWorkerRequest类,会判断是iis6还是iis7,并且会对请求报文进行封装一次。

[5] 将创建的HttpWorkerRequest会创建HttpRuntime,且会将worker 传入HttpRuntime.ProcessRequestNoDemand()中,此方法会创建HttpContext对象(初始化httpRequest和httpResponse)

[6] 在创建HttpContext之后紧接着会创建HttpApplication,且在创建过程中是通过HttpApplicationFaactory.GetApplicationInstance创建出来。

[7] Application会初始化事件管道。先会取config信息中的HttpModel,并注册,页面默认创建一个。然后会注册19的管道事件。

[8] 。

 

 

Section

Event

Description

HttpModule

BeginRequest

此事件标志着一个新的请求,它保证在每个请求中都会被触发。

HttpModule

AuthenticateRequest

此事件标志ASP.NET运行时准备验证用户。任何身份验证代码都可以在此注入。

HttpModule

AuthorizeRequest

此事件标志ASP.NET运行时准备授权用户。任何授权代码都可以在此注入。

HttpModule

ResolveRequest

在ASP.NET中我们通常使用OutputCache指令做缓存。在这个事件中,ASP.NET运行时确定是否能够从缓存中加载页面,而不是从头开始生成。任何缓存的具体活动可以被注入这里。

HttpModule

AcquireRequestState

此事件标志着ASP.NET运行时准备获得Session会话变量。可以对Session变量做任何你想要做的处理。

HttpModule

PreRequestHandlerExecute

恰好在ASP.NET 开始执行事件处理程序前发生。可以预处理你想做的事。

HttpHandler

ProcessRequest

HttpHandler逻辑被执行。在这个部分我们将为每个页面扩展写需要的逻辑。

Page

Init

此事件发生在ASP.NET页面且可以用来:
1、动态地创建控件,如果你一定要在运行时创建控件;
2、任何初始化设置
3、母版页及其设置
在这部分中我们没有获得viewstate、postedvalues及已经初始化的控件。

Page

Load

在这部分ASP.NET控件完全被加载且在这里你可以写UI操作逻辑或任何其他逻辑。NOTE:这个事件也是我们最常见且最常用的一个事件。

Page

Validate

如果在页面上你有验证器,你同样想在这里做一下检查。

Page

Render

是时候将输出发送到浏览器。如果你想对最终的HTML做些修改,你可以在这里输入你的HTML逻辑。

Page

Unload

页面对象从内存中卸载。                                     

HttpModule

PostRequestHandlerExecute

可以注入任何你想要的逻辑,在处理程序执行之后。

HttpModule

ReleaseRequestState

如果你想要保存对某些状态变量的更改,例如:Session变量的值。

HttpModule

UpdateRequestCache

在结束之前,你是否想要更新你的缓存。

HttpModule

EndRequest

这是将输出发送到客户端浏览器之前的最后一个阶段。

 

Appliction的事件顺序:

Application_Start//应用开始,只在应用刚开始时执行一次

BeginRequest//作为执行的 HTTP 管道链中的第一个事件发生,当 ASP.NET 的请求做出响应。

AuthenticateRequest//当安全模块已建立的用户标识时出现。

PostAuthenticateRequest//当安全模块已建立的用户标识时出现。

AuthorizeRequest//安全模块已验证用户身份验证时发生。

PostAuthorizeRequest//安全模块已验证用户身份验证时发生。

ResolveRequestCache//当 ASP.NET 完成授权事件以便从缓存中,跳过的事件处理程序 (例如,一个页面或 XML Web 服务) 执行的请求提供服务的缓存模块时发生。

PostResolveRequestCache//ASP.NET 将绕过当前事件处理程序的执行,并允许缓存模块以处理从缓存请求时发生。

PostMapRequestHandler//当 ASP.NET 已映射到相应的事件处理程序的当前请求时出现。

AcquireRequestState//当 ASP.NET 获取与当前的请求相关联的当前状态 (例如,会话状态)。

PostAcquireRequestState//获取与当前的请求相关联的请求状态 (例如,会话状态) 时发生,从此开始处理页面的流程。

PreRequestHandlerExecute//ASP.NET 开始执行事件处理程序 (例如,一个页面或 XML Web 服务) 之前发生。

PostRequestHandlerExecute//当 ASP.NET 事件处理程序 (例如,一个页面或 XML Web 服务) 完成执行时发生。

ReleaseRequestState//当 ASP.NET 已完成执行所有请求事件处理程序和存储数据的请求状态时发生。

PostReleaseRequestState//当 ASP.NET 已完成执行所有请求事件处理程序和存储数据的请求状态时发生。

UpdateRequestCache//当 ASP.NET 完成更新的缓存模块和存储用于为从缓存中的后续请求提供服务的响应时发生。

PostUpdateRequestCache//当 ASP.NET 完成更新的缓存模块和存储用于为从缓存中的后续请求提供服务的响应时发生。

LogRequest//当 ASP.NET 完成更新的缓存模块和存储用于为从缓存中的后续请求提供服务的响应时发生。

PostLogRequest//当 ASP.NET 已完成处理的事件处理程序时发生 LogRequest 事件。

EndRequest//作为执行的 HTTP 管道链中的最后一个事件发生,当 ASP.NET 的请求做出响应。

Error 当引发未处理的异常时发生。

Application_End//引用结束

 

页面生命周期

PreInit--检查IsPostBack、动态控件主页

Init--页面中控件初始化完成,此可读取或者继续初始化

InitComplete--完成所有的初始化

PreLoad--

Load-- 加载所有控件

控件事件

LoadComplete

PreRender--对以上事件等操作后的首次渲染

SaveStateComplete --保存viewstate

Render  -- 渲染

Unload--页面完毕