ASP.NET管线处理过程
当用户发出ASP.NET请求时,经过IIS的ISAPI过滤后由ASP.NET处理的程序有.aspx .ascx .ashx和.asmx
当ASP.NET接收到对应用程序中任何资源的第一个请求时,ApplicationManager的类会创建一个应用程序域(ASP.NET以一个虚拟目录为应用程序,web.config为应用程序的要目录,应用程序域的为了隔离程序之间的全局变量,并允许单独卸载每个应用程序,应用程序域是一个操作系统中一个或多个应用程序所驻留的分区)(public sealed class ApplicationManger:MarshalByRefObject)
ApplicationManager对象在ASP.NET应用程序的宿主环境中提供对象生存期管理.对对象负责:
1.激活和初始化ASP.NET应用程序.
2.管理应用程序生存期和应用程序中注册对象的生存期.
3.公开宿主环境使用的对象以处理ASP.NET应用程序请求.
4.提供任何给定时刻运行于宿主进进程中的应用程序的列表.
在应用程序域中,将为名HostingEnvironment的类创建一个实例,该实例是提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问.
创建了应用程序域并对HostingEnviroment对象进行实例化之后,将为每个请求创建ASP.NET核心对名象,如果HttpContext,HttpRequest,HttpResponse.初始化所有核心应用程序对象后,将通过创建HttpApplication类的实例启动应用程序.如果应用程序具有Global.asax文件,则ASP.NET会创建Global.asa(从HttpApplication类派生)的一个实例,并使用该派生类表示应用程序.(第一次在应用程序中请求ASP.NET页和进程时,将他建HttpApplication的一个新实例,不过,为了尽可能提高性能,可对多个请求重复使用HttpApplication实例)他建HttpApplication的实例时,将同时创建所有已配置的模块.
在处理该请求时将由HttpApplication类执行以下事件.(管线处理请求),进入真正的主题啦.哈哈,说那么多废话
1.对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记.
2.如果已在Web.config文件的UrlMappingSection节中配置了任何URL,则执行URL映射.
3.引发BeginRequest事件.(在ASP.NET响应请求时作为HTTP执政党行管线链中的第一个事件发生(顺便提一下.net framework里面的事件,好久没温习,public event EventHandler BeginRequest,事件使用委托,委托就是具有同返回类型和参数的方法,EventHandlder是一委托方法public delegate void EventHandler(Object sender,EventArgs e)
4.引发AuthenticateRequest事件.(当安全模块已建用户标识时发生)
5.引发PostAuthenticateRequest事件.(当安全模块已建用户标识时发生)
6.引发AuthrizeRequest事件(AuthrizeRequest事件发出信号表示ASP.NET对当前请求进行了授权.
7.引发PostAuthorizeRequest事件(此事件发出信号表示ASP.NET已对当前请求进行了授权.
8.引发ResolveRequestCache事件(当ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过事件处理程序的执行.
9.引发PostResolveRequestCache事件(在ASP.NET跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生
10.根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现IHttpHandler的类,对请求进行处理.如果该请求针对Page类派生的对象(页),并且需要对该页进行编译,则ASP.NET会在创建该页的实例之前对其进行编译.
11.引发PostMapRequestHandler事件(在ASP.NET已将当前请求映射到相应的事件处理程序时发生
12.引发AcquireRequestState事件(当ASP.NET获取与当前请求关联的当前关态(如会话状态)时发生
13.引发PostAcquireRequestState事件
14.引发PreRequestHandlerExecute事件(恰好在ASP.NET开始执行事件处理前发生)
15.为该请求调用合适的IHttpHandler类的ProcessRequest方法(或异步版BeginProcessRequest).例如该请求针对某页,则当前的页实例将处理该请求
16.引发PostRequestHandlerExecute事件(在ASP.NET事件处理程序执行完毕时发生)
17.引发ReleaseRequestState事件(在ASP.NET执行完所有请求事件处理程序后发生.该事件将使状态模块保存当前状态数据)
18.引发PostReleaseRequestState事件(在ASP.NET已完成所有请求事件处理程序的执行并且请求状态数据已存储时发生)
19.如果定义了Filter属性,则执行响应筛选
20.引发UpdateRequestCache事件(引ASP.NET执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生)
21.引发PostUpdateRequestCache事件(在ASP.NET完成了缓存模块的更新并存储了以下响应时发生,这些响应用于满足来自缓存的后续请求)
22.引发EndRequest(在ASP.NET响应请求时作为HTTP执行管线链中的最后一个事件发生.