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

[经验分享] IIS如何处理一个Asp.net请求 (How IIS Process Asp.net request)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-16 13:55:47 | 显示全部楼层 |阅读模式
  当一个Request由客户端发送到IIS,IIS会处理这个请求并且发送对应的资源到客户端。那么IIS是怎么处理这个Request,Asp.net在IIS 处理Request的过程中扮演一个什么角色呢? 我一直都对这个问题感兴趣,经过一个周末的努力,自己对这个问题有了一定的了解,并分享我的见解,如果有错误和不足,希望指正。。
  当IIS接受到一个Request, 最先对Request进行处理的是HTTP.SYS, 它的作用是将Request分发到对应的应用程序池(Application Pool),这里会引发出两个问题:
  1.什么是应用程序池?
  2. HTTP.SYS是如何将Request正确分发到对应的应用程序池的?
  第一个问题:提到应用程序池,就不得不提到工作者进程(Work Process)。 工作者进程(w3wp.exe)是运行Asp.net的基础,它根据Request请求的资源的拓展名(例如.aspx)将请求发送到相应的处理模块(ISAPI)。 应用程序池是工作者进程的容器,它可以包含一个或多个工作者进程而且一个应用程序池可以包含一个或多个web应用程序,而且每个应用程序池中的工作者进程都可以被池中的网站共同使用。
DSC0000.png
  第二个问题:HTTP.SYS能正确的将Request发送到相应的应用程序池,那么它是如何做到的?每当添加一个应用程序池,它所对应的ID都会被注册到HTTP.SYS,当HTTP.SYS接受到一个任何应用程序Request,它都会根据上面保存的映射关系,将Request派发到正确的应用程序池中。
  在HTTP.SYS 派发Request之前的所有过程被称之为内核阶段(Kernel Model),它可以理解为IIS分配处理任务阶段。下面介绍另外一个阶段,也是我们业务逻辑实现的地方,用户阶段(User Model)。
DSC0001.png


在由HTTP.SYS将Request派发到应用程序池的过程中,一个叫Web Admin Service将来自有HTTP.SYS的请求派发到应用程序池中。

在应用程序池接受到Request,工作者进程(w3wp.exe)会根据Request查找相应的处理模块,例如如果请求的是以.aspx结尾的Asp.net页面,那么w3wp会加载aspnet_isapi.dll,以这个模块对请求进行处理。 在aspnet.isapi加载之后,它会运行HttpRuntime的ProcessRequest方法,这是web应用程序的入口,当这个方法调用完毕,HttpContext,HttpRquest,HttpResponse等核心对象会被创建。

接下来HttpApplication创建,它包含一些列的HttpModule和HttpHandler,这些对象会处理相应的Request,这个过程就是我们所熟知的Http Pipeline。 程序的执行过程是由HttpModule到HttpHandler最后再到HttpModule。 我们可以自己创建HttpModule和HttpHandler,例如我们所熟悉的asp.net页面就是一个HttpHandler,想了解更多请点击这里。


DSC0002.png

  HttpHander是IIS处理Request的终点,所有的Request都会被传送到相应的HttpHandler,这是我们熟悉的Asp.net页面的生命周期开始了。
DSC0003.png
  好了,从IIS的角度,一个Request的处理过程就已经全部介绍完了,文本的大部分知识来自于下面两篇博客,感谢博客原作者所作出的贡献。
  引用:
  http://www.dotnetfunda.com/articles/article821-beginners-guide-how-iis-process-aspnet-request.aspx
  http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

运维网声明 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-99823-1-1.html 上篇帖子: .NET Framework 工具之——ASP.NET IIS 注册工具 下篇帖子: 64位机配置iis 运行asp.net 程序(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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