【asp.net IIS运行机制】个人总结

IIS运行图

图片引自【wenthink】的博文,原文地址:http://www.cnblogs.com/wenthink/archive/2013/05/06/HTTP_IIS_ASPNET_Pipeline.html

IIS 运行机制详解

本文以IIS6为例,因为IIS6之后,IIS有集成模式和经典模式了 注:集成模式,将IIS和aspnet_Isapi.dll 集成到一起了

IIS中有用户模式和内核模式: ①:用户模式不能直接操作内存

                                     ②:内核模式,直接操作内存

浏览器请求流程:

①:发送请求到服务器IIS

②:服务器IIS用户模式中的http.sys 接收到 http request

③:然后它会根据 IIS 中的 Metabase(IIS元数据,维护者Application Pool 和 Worker Process(w3wp.exe) 的Mapping(映射关系)。) 查看基于该请求的 应用程序,属于哪个 Application Pool(应用程序池), 如果该 Application Pool 不存在,则创建;否则直接将 request 发到对应 Application Pool 的 Queue中。 注: IIS6中有应用程序池机制,通过队列来保存已有的池,IIS7以后可以在IIS中创建网站时,指定某一网站使用某一个应用程序池 一个应用程序池对应着一个Worker Process(w3wp.exe)

④:WAS(Web Administrative Service)根据 IIS元数据中维护的映射关系 ,获取 应用程序池 Queue 对应的Worker Process(w3wp.exe),如果没有,就创建这样一个进程,然后将请求交给这个 w3wp.exe 执行(这里就是我们在调试程序时,可以在任务管理器中查看到的IIS启动进程)

⑤:在创建Worker Process(w3wp.exe)的时候就会根据后缀找到并加载对应的ISAPI扩展,可以在IIS中指定某些后缀的请求需要调用哪个ISAPI(这些扩展程序,在安装IIS后会在电脑C盘)

 

 

 ⑥:以ASPNET_ISAPI.DLL为例

      在Worker Process(w3wp.exe)被创建时,根据请求后缀加载ASPNET_ISAPI.DLL这个程序集,加载ASPNET_ISAPI.DLL时,就会加载ASP.NET应用程序的运行环境(CLR)

⑦:加载CLR后,由  AppManagerAppDomainFactory类中的Create方法,创建AppDomain(应用程序域)

    注:应用程序池用来分割每个程序的运行,保证程序运行的安全,一个应用程序池不能访问另一个应用程序池中的资源

⑧:然后在AppDomain中加载ISAPIRuntime

.....

posted @ 2014-03-11 22:00  修行者V5  阅读(467)  评论(0编辑  收藏  举报