1.概念介绍
IIS 所收到的对某 Microsoft ASP.NET 页面的每个请求都被移交给 ASP.NET HTTP 管线。HTTP 管线由一系列托管对象组成,这些对象按顺序处理该请求,并完成从 URL 到普通 HTML 文本的转换。HTTP 管线的入口点是 HttpRuntime 类。ASP.NET 基础结构为辅助进程中所承载的每个 AppDomain 创建此类的一个实例请注意,该辅助进程为当前正在运行的每个 ASP.NET 应用程序维护一个不同的 AppDomain。
要激活 HTTP 管道,可以创建一个 HttpRuntime 类的新实例,然后调用其 ProcessRequest 方法。一个完整的页面请求会包括下面的流程:
(1).被WWW服务器截获(inetinfo.exe进程), 该进程首先判断页面后缀, 然后根据IIS中配置决定调用具体的扩展程序。aspx就会调用aspnet_isapi.dll,
(2)由aspnet_isapi.dll发送给w3wp.exe(iis 工作者进程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe)。
(3)在w3wp.exe调用.NET类库进行具体处理,顺序如下:ISAPIRuntim, HttpRuntime, HttpApplicationFactory, HttpApplication, HttpModule, HttpHandlerFactory, HttpHandler
ISAPIRuntime:主要作用是调用一些非托管代码生成HttpWorkerRequest对象,HttpWorkerRequest对象包含当前请求的所有信息,然后传递给HttpRuntime

HttpRuntime:根据HttpWorkerRequest对象生成HttpContext,HttpContext包含request、response等属性, 再调用HttpApplicationFactory来生成IHttpHandler, 调用HttpApplication对象执行请求

HttpApplicationFactory: 生成一个HttpApplication对象
HttpApplication:进行HttpModule的初始化,HttpApplication创建针对此Http请求的 HttpContext对象

HttpModule: 当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。

HttpHandlerFactory:把用户request 转发到HttpHandlerFactory,再由HttpHandlerFactory实例化HttpHandler对象来相应request
HttpHandle:Http处理程序,处理页面请求


///HttpRuntime主方法ProcessRequest(主要方法)
    private void ProcessRequestInternal(HttpWorkerRequest wr)
    {
        // 调用HttpWorkerRequest生成HttpContext
        HttpContext context = new HttpContext(wr, false);
        //传入context,生成一个IHttpHandler实例
        IHttpHandler app = HttpApplicationFactory.GetApplicationInstance(context);
        //调用IHttpHandler.ProcessRequest的方法
        app.ProcessRequest(context);
    }

2.主要属性
    AppDomainAppId 获取 HttpRuntime 所在的应用程序域的应用程序标识。
   AppDomainAppPath 获取承载在当前应用程序域中的应用程序的应用程序目录的物理驱动器路径。
   AppDomainAppVirtualPath 获取包含承载在当前应用程序域中的应用程序的目录的虚拟路径。
   AppDomainId 获取 HttpRuntime 所在的应用程序域的应用程序标识。
   AspClientScriptPhysicalPath 获取 ASP.NET 客户端脚本文件的文件夹路径。
   AspClientScriptVirtualPath 获取 ASP.NET 客户端脚本文件的虚拟路径。
   AspInstallDirectory 获取安装 ASP.NET 可执行文件的目录的物理路径。
   BinDirectory 获取当前应用程序的 /bin 目录的物理路径。
   Cache 获取当前应用程序的 Cache。
   ClrInstallDirectory 获取安装公共语言运行库可执行文件的目录的物理路径。
   CodegenDir 获取 ASP.NET 存储当前应用程序的临时文件(生成的源、编译了的程序集等)的目录的物理路径。
   IsOnUNCShare 获取一个值,该值指示应用程序是否映射到通用命名约定 (UNC) 共享。
   MachineConfigurationDirectory 获取当前应用程序的 Machine.config 文件所在目录的物理路径。
   范例:protected void Page_Load(object sender, EventArgs e)
    {

        StringBuilder sb = new StringBuilder();
        String nl = "<br />";
        sb.Append("AppDomainAppId = " + HttpRuntime.AppDomainAppId + nl);
        sb.Append("AppDomainAppPath = " + HttpRuntime.AppDomainAppPath + nl);
        sb.Append("AppDomainAppVirtualPath = " + HttpRuntime.AppDomainAppVirtualPath + nl);
        sb.Append("AppDomainId = " +   HttpRuntime.AppDomainId + nl);
        sb.Append("AspInstallDirectory = " + HttpRuntime.AspInstallDirectory + nl);
        sb.Append("BinDirectory = " + HttpRuntime.BinDirectory + nl);
        sb.Append("Cache = " + HttpRuntime.Cache + nl);
        sb.Append("ClrInstallDirectory = " + HttpRuntime.ClrInstallDirectory + nl);
        sb.Append("CodegenDir = " + HttpRuntime.CodegenDir + nl);
        sb.Append("IsOnUNCShare = " + HttpRuntime.IsOnUNCShare.ToString() + nl);
        sb.Append("MachineConfigurationDirectory = " + HttpRuntime.MachineConfigurationDirectory + nl);
        lbltxt.Text = sb.ToString();
   }
   结果
   AppDomainAppId = 151e2e91
   AppDomainAppPath = D:\Project\runtime\
   AppDomainAppVirtualPath = /runtime
   AppDomainId = 151e2e91-1-129018129644375000
   AspInstallDirectory = D:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\
   BinDirectory = D:\Project\runtime\bin\
   Cache = System.Web.Caching.Cache
   ClrInstallDirectory = D:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\
   CodegenDir = D:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET    Files\runtime\ca1cfec8\c60f67af
   IsOnUNCShare = False
   MachineConfigurationDirectory = D:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Config