asp.net 应用程序生命周期:
概述:当此请求到达Web服务器时,由HTTP.SYS负责接收,根据此请求的URL,HTTP.SYS将其传递给此ASP.NET应用程序所对应的应用程序池,由在此应用程序池中运行的工作者进程负责处理请求(如果工作者进程不存在,则IIS监控程序WAS会创建一个,否则,复用已有的工作者进程)。
工作者进程接收到这个请求之后,装载专用于处理ASP.NET页面的一个ISAPI扩展“aspnet_isapi.dll”,并将HTTP请求传给它。 工作者进程加载完aspnet_isapi.dll后,由aspnet_isapi.dll负责加载ASP.NET应用程序的运行环境――CLR(IIS 7集成模式下,由于CLR是预加载的,所以这一步就不需要了)。
加载CLR之后,由ApplicationManager类负责创建一个应用程序域,同时会创建一个HostingEnvironment对象。
当应用程序域创建完成之后,一个ISAPIRuntime对象被创建,并自动调用它的ProcessRequest()方法,此方法根据传入的HTTP请求创建一个HttpWorkerRequest对象;然后调用ISAPIRuntime对象StartProcessing()方法启动整个HTTP请求处理过程(此即“HTTP管线:HTTP Pipeline”)。这个处理过程的开端,一个HttpRuntime类型的对象被创建,HttpRuntime.ProcessRequest(HttpWorkerRequest wr)方法根据HttpWorkerRequest对象中所提供的HTTP请求信息,创建了一个HttpContext对象。HttpContext对象包含HttpResponse和HttpRequest这两个对象。
HttpRuntime类的ProcessRequest()方法除了创建HttpContext对象之外,向HttpApplicationFactory类的一个实例申请分配一个HttpApplication 对象用于管理整个HTTP请求处理管线中的各种事件。
HttpApplication对象负责装配出整个“HTTP请求处理管线(HTTP Pipeline)”,可以将“HTTP请求处理管线”与现代工厂中的“生产流水线”做个类比,HttpContext对象就是这个生产流水线要加工的“产品”,HttpContext对象经过“生产流水线”的不同部分时,HttpApplication对象会先后激发出一连串的事件。一种特定的组件——HTTP Module可以响应这些事件,在此事件响应代码中可以对HttpContext对象进行“加工和处理”,从这个意义上说,HTTP模块可以看成是“生产流水线”中的工人。HTTP Module其实就是前面所介绍过的“ISAPI筛选器”。对HTTP请求的处理过程最终是由一个实现IHttpHandler接口的对象在“处理阶段”完成的。HttpHandler(HTTP处理程序)对象是整个“产品生产线”的核心,由它负责将产品装配成形。
未完待续。。。。。