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

[经验分享] iis6.0与asp.net的运行原理

[复制链接]

尚未签到

发表于 2017-12-28 23:32:36 | 显示全部楼层 |阅读模式
  这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教。
  这篇博客主要是描述asp.net程序在iis6.0上的一个执行过程。
  执行过程图:

组件描述
  HTTP.SYS:
  Win2003和winXP SP2的核心操作系统组件,,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。
  优点:

  • 缓存-静态的内容被缓存于内核模式下,这使服务响应速度更快
  • 记录(Log)-IIS的LOG功能更快且标准化
  • 带宽控制
  • 可靠性-所有的服务请求会在Http.sys里暂存入队列,而不是由服务程序本身来处理,这样,即使服务程序重启,尚未被处理的请求也不会丢失了
  • 端口重用- 现在,只要是通过Http.sys管理的端口(基本包括了那些著名的端口,比如80),都可以同时允许多个程序同时监听了。
  简单来说它是独立于IIS之外的,任何http请求都会首先被它侦听到
  W3SVC:
  1. 没有第三方应用程序的代码
  2. 根据配置数据的设置创建和监视w3wp.exe,由工作线程运行Web网站应用。
  3. 总是处于运行状态,因此它能够监视Web应用的健康状况,并在必要时采取行动。由于这一策略,服务器能够根据用户指定的参数监视和重新启动应用程序。
  Application Pool(应用程序池):
  1. 在IIS6.0中,每一个用户web应用程序都会运行在一个应用程序池中。这个应用程序池可以是IIS默认的应用程序池,也可以是用户自定义的应用程序池。
  2.作为一个宿主程序,每个应用程序池中都会运行着一个或者多个用户web应用程序。
  3.在应用程序池中,存在着一个或者多个工作进程(一个以上叫Web园)。每个工作进程只能属于一个特定的应用程序池,由这些工作进程来负责管理应用程序池中的用户web应用程序。
  w3wp.exe(工作进程):
  默认情况下,IIS 6.0在工作进程隔离模式下运行,在这种模式中,对于每一个Web应用,IIS 6.0都用一个独立的w3wp.exe的实例来运行它。 因此,工作进程隔离模式不存在          进程内(In-Process)应用程序存在的问题,有效地提高了可靠性和安全性。可靠性的提高是因为一个Web应用的故障不会影响到其他Web应用,也不会影响http.sys,每一        个Web应用由W3SVC单独地监视其健康状况。安全性的提高是由于应用程序不再象IIS 5.0和IIS4.0的进程内应用那样用System帐户运行,默认情况下,w3wp.exe的所有        实例都在一个权限有限的“网络服务”帐户下运行,必要时,还可以将工作进程配置成用其他用户帐户运行。
  Metabase(元数据):

  • 保存配置数据
  • 有一个map保存应用程序池和工作进程的数据  
执行过程

  • 在客户端(一般指浏览器)输入一个http://www.***.com/default.aspx/
  • HTTP.SYS首先侦听到请求(静态文件缓存于内核模式下)
  • W3SVC接收请求,判断是否是静态文件,静态文件直接响应,否则将请求转发给应用程序池的请求队列,从元数据(通过WAS)中查找应用程序池数据,没有则创建
  • WAS请求传递给应用程序池对应的工作进程,没有就创建(创建时加载ISAPI)
  • ISAPI会根据ECH创建一个HttpWorkerRequest
  • 接下来进入应用程序域,由非托管代码变为托管代码(CLR)
  • HttpRuntime执行ProcessRequest方法产生HttpContext
  • HttpApplicationFactory执行GetApplicationInstance方法产生HttpApplication
  • HttpApplication执行一系列事件
Application暴露出的事件
  1.BeginRequest:asp.net开始处理请求的第一个事件,表示处理的开始。
  2.AuthenticateRequest:验证请求,一般用来取得请求的用户信息。
  3.PostAuthenticateRequest:已经获取请求的用户信息。
  4.AuthorizeRequest:授权,一般用来检查用户的请求是否获得权限。
  5.PostAuthorizeRequest:用户请求已经获得授权。
  6.ResolveRequestCache:获取以前处理缓存的处理结果,如果以前缓存过,那么,不用再进行请求的处理工作,直接返回缓存的结果。
  7.PostResolveRequestCache:已经完成缓存的处理工作。
  8.PostMapRequestHandler:已经根据用户的请求,创建了请求的处理器对象。
  9.AcquireRequestState:取得请求的状态,一般用于session
  10.PostAcquireRequestState:已经获得了session
  11.PreRequestHandlerExecute:准备执行处理程序。
  12.PostRequestHandlerExecute:已经执行了处理程序
  13.ReleaseRequestState:释放请求的状态。
  14.PostReleaseRequestState:已经释放了请求的状态。
  15.UpdateRequestCache:更新缓存。
  16.PostUpdateRequestCache:已经更新了缓存。
  17.LogRequest:请求的日志操作
  18.PostLogRequest:已经完成请求的日志操作。
  19.EndRequest:本次请求处理完成。

运维网声明 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-429168-1-1.html 上篇帖子: 通过ProGet搭建一个内部的Nuget服务器 下篇帖子: HTTP状态码大全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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