由IIS到Page对象(一)

这几天认真地看了黄忠成先生的<<Asp.Net组件设计>>中的第三章中的第一节,标题:由IIS到Page对象,在博客园大 家对这章内容也比较了解,虽然这章内容晦涩难懂,但的确是精华所在,所以我也是连读了好几遍,再加上在网上也找了一些相关资料学习了一下,觉得理解比先前 透彻了一些,所以想把自己的心得贴出来,给大家指正一下,共同学习.
    首先当访问者在浏览器中输入网址,这个请求被传至IIS服务器,我们假设这个请求是一个*.aspx文件,这个请求将会被 inetinfo.exe进程所截获, 所有的请求都要经过inetinfo.exe,由它来判断请求文件的扩展名,当它得知是.aspx时,会将请求转交给aspnet_isapi.dll文 件(大家可通过IIS中关于请求文件扩展名映射表来获得更多的信息), aspnet_isapi.dll在此处扮演的也是一个入口的角色,它获得这个请求后,将通过NamePipe管道,将请求转送给 aspnet_wp.exe进程, aspnet_wp.exe会根据请求来解出其中的信息也就是虚拟目录信息来创建一个新的AppDomain.在创建AppDomain时 aspnet_wp.exe会判断虚拟目录所对应的AppDomain是否存在,如果存在就不用创建,不存在就会创建一个新的AppDomain对象后加 载asp.net执行时期所需要的Assemblys及访问者所要求的其它文件.所以说IIS中AppDomain的数量与访问过Asp.net虚拟目录 数相同的.
    然后aspnet_wp.exe会将请求传送给AppDomain中ISAPIRuntime对象, ISAPIRuntime对象由ISAPI封包中解出信息后再转交给HttpRuntime对象,接着会调用 HttpRuntime.ProcessRequest函数处理用户的请求. HttpRuntime.ProcessRequest会创建HttpContext对象,并且将会管理HttpContext与Cache(暂不清楚由 谁创建,可能由IIS分配).在HttpContext创建后, HttpRuntime再将请求送入到HttpApplicationFactory容器中,由HttpApplicationFactory创建一个 HttpApplication对象,在创建HttpApplication对象前HttpApplicationFactory会先解译目录中的 Global.asax文件,接着加载虚拟目录中的Application Assembly(Global.dll),然后合并两者创建出Ghost Application Class,最后编译些Class后取得对象返回给httpRuntime对象,这个取得的对象也就是HttpApplication对象.接着 HttpRunTime将请求较交给HttpApplication对象处理.在这里我有个疑问,不知道Application Assembly(Global.dll)是不是虚拟目录中Bin下面所有的dll文件?还请大家解答一下!
当HttpApplication创建完后, httpRuntim对象会调用HttpApplication.ProcessRequest函数来处理请求,在这里黄忠成先生所讲的是 HttpApplication.ProcessRequest函数将请求转交给对应的HttpHandler对象来处理,然后再补充在 HttpApplication初始化期间,相关的HttpModules模块才被加载,但HttpModules真正功能确没讲多少,也只是点到为止. 的确是个遗憾.后来我在其它资料发现HttpApplication.ProcessReques并不是直接将请求转交给HttpAppliction对 象,而是先经过HttpModules模块的处理,也就是说,HttpModeules是请求的必经之路.在HttpModules模块中有相应的事件处 理,其中有一事件是HttpModule.PreRequestHandlerExecute(),这一事件处理完后,才进入httpHandler, 然后HttpHandler才能处理请求,处理完后将结果返回到HttpModules中,接着再运行 HttpModule.PostRequestHandlerExecute(),和其它的模块事件,直到整个请求结束.所以可以这么说 HttpHandler是在HttpModules中运行的.
    今天先贴第一节的第一部分,讲到一个请求从客户端到IIS最后由HttpHandler来处理,感觉自己对这部分请求流程有了一定的认识,但 对Ghost Application Class的创建过程,也就是HttpApplication对象创建的一些细节不是很清楚,希望大家对这一块能谈一下自己的认识,让我也学习学习.

你可能感兴趣的:(page)