设为首页 收藏本站
查看: 790|回复: 0

[经验分享] 由IIS到Page对象(一)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-16 14:14:27 | 显示全部楼层 |阅读模式
这几天认真地看了黄忠成先生的<<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),然后合并两者创建出GhostApplicationClass,最后编译些Class后取得对象返回给httpRuntime对象,这个取得的对象也就是HttpApplication对象.接着HttpRunTime将请求较交给HttpApplication对象处理.在这里我有个疑问,不知道ApplicationAssembly(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 ApplicationClass的创建过程,也就是HttpApplication对象创建的一些细节不是很清楚,希望大家对这一块能谈一下自己的认识,让我也学习学习.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-99839-1-1.html 上篇帖子: 修改IIS默认的localhost名称 下篇帖子: ASP.NET 实践:在 IIS 中安装并配置 SMTP 虚拟服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表