ASP.NET HTTP运行时环境,它主要包括4个对象:
(1)HttpRuntime对象
网页请求通过一个处理原始HTTP负荷的对象管道,并在该链末端为浏览器产生一些标记代码。该管道入口点是HttpRuntime类。ASP.NET工作进程(IIS5.0是aspnet_wp.exe)激活该HTTP管道方法时创建HttpRuntime对象实例,然后调用它的ProcessRequest方法。注意:HttpRuntime.ProcessRequest方法与IHttpHandler接口无关。
HttpRuntime对象在创建时初始化许多有助于网页请求的内部对象。调用ProcessRequest方法时,HttpRuntime对象首先把网页提供给浏览器。它为请求创建一个新的上下文(HttpContext类的一个实例,封装了有关请求的所有Http特有信息),并初始化一个特殊的writer对象,其中将收集标记代码。HttpRuntime对象使用该上下文信息找到或创建一个能够处理该请求的Web应用程序对象。通过使用URL中包含的虚拟目录信息搜索该应用程序。用来寻找或创建web应用程序对象的是HttpApplicationFactory(是一个内部使用的对象,负责返回一个能够处理该请求的有效对象。)
(2)HttpApplicationFactory 应用程序工厂
在应用程序的生命周期内,HttpApplicationFactory对象维护一个HttpApplication对象池,以服务于进入的Http请求。在被激活后,该应用程序工厂对请求验证所瞄准的虚拟文件夹是否有一个AppDomain.如果应用程序已经运行,该工厂就从可用的对象池中获取一个HttpApplication,并把它传递给请求。如果现有的对象不可用,则创建一个新的HttpApplication对象。
(3)HttpApplication对象
HttpApplication对象是一个基类,它代表一个正在运行的ASP.NET应用程序。一个正在运行的ASP.NET应用程序由一个动态创建的继承自HttpApplication的类表示。通过解析global.asax文件内容,可以创建动态生成的应用程序类的源代码。
HttpApplication派生类的一个实例负责管理分配给它的请求的整个生命周期。只有完成后才能重用。HttpApplication维护一个HTTP模块对象列表,它可以筛选或修改请求的内容。当请求通过管道时,调用那些已经注册的模块。
HttpApplication对象确定表示被请求的资源的对象类型,这个类型通常是一个ASP.NET页,一个Web服务或者一个用户控件.然后HttpApplication使用合适的处理程序工厂,获得一个表示被请求资源的对象。一个处理程序工厂对象是一个实现了IHttpHandlerFacory接口类,负责返回一个能够处理该Http请求的托管类的实例——一个HTTP处理程序。ASP.NET页面是一个处理程序对象,一个实现了IHttpHandler接口的类的实例。
(4)PageHandlerFactory 页面工厂
HttpApplication 类确定必须处理请求的对象的类型并委派该类型特定的处理程序工厂创建该类型一个实例。当被请求的资源是ASPX页时,那么该工厂就是PageHandlerFactory的类。为了找到合适的处理程序,HttpApplication使用配置文件的<httpHandlers>节中的信息。处理程序工厂对象并创建一个对象的实例,表示被请求的特定页。该对象继承System.Web.UI.Page类,Page类实现了IHttpHandler接口。该页对象返回应用程序工厂,而程序工厂又把它传回到HttpRuntime对象。ASP.NET运行库完成最后调用是IHttpHandler的ProcessRequest方法。这个调用执行该页的代码,并生成最终的HTML代码。
来自:http://www.cnblogs.com/couhujia/archive/2010/04/21/1717366.html