【ASP.NET Process Model 笔记 一】第一次深入理解 IIS 和 ASP.NET ISAPI 的处理过程

下面是个人的吐血总结,理解处理过程中重要的图:

 


 IIS 5.x的处理过程:

  1.   InetInfo.exe(即IIS 5所在的进程)接受请求。(在User Mode即用户模式下进行)
  2.   一些IIS能处理的文件,如静态文件则直接返回给浏览器,若不行则通过ISAPI Extension Mapping获知对应的ISPAIASP.NET ISAPI(当请求为.aspx文件时)
  3.   ASP.NET ISAPI创建进程aspnet_wp.exe(注:该进程跑着全部Application,通过AppDomain分离)
  4.  接着进入管道处理HttpRuntime->HttpWorkerRequest->HttpApplicationFactory。

 

 IIS 6的处理过程:  

 

  1.  组件Http.sys来侦听请求。(在Kernel Mode即用户模式下进行)
  2. 找到对应的Application Pool(每个Application会有一个App Pool,每个Pool跑在对应的w3wp.exe进程中),将请求加入到Application Pool Queue。
  3. Application Pool所在的进程初始化时就加载ASP.NET ISAPI,ASP.NET ISAPI进而加载CLR。
  4. 接着进入管道处理HttpRuntime->HttpWorkerRequest->HttpApplicationFactory。(此步骤与IIS 5相同) 

 

 

IIS 5.x 与IIS 6的主要差异:

 

  •  iis 5是一个进程跑全部 Application;iis 6是每一个Appliction对应一个进程,每个进程是一个Application Pool。
  • IIS 5:InetInfo.exe(即IIS 5所在的进程)接受请求。(在User Mode即用户模式下进行) ;IIS 6:组件Http.sys来侦听请求。(在Kernel Mode即用户模式下进行 
  • aspnet_isapi.dll的作用点不用:iis 5中, InetInfo.exe找到对应的isapi即aspnet_isapi后,是aspnet_isapi创建Worker Process。iis 6中,worker process初始化的时候,aspnet_isapi被加载,然后aspnet_isapi加载CLR。也就是说,iis 5中aspnet_isapi创建了worker process,而iis 6是worker process初始化时,才加载的aspnet_isapi。所以最上面的图中,iis 5的aspnet_api.dll在worker process图外,iis 6的aspnet_api.dll在图内。

 


概括: 

 

  •  所谓http管道就是 HttpRuntime->HttpWorkerRequest->HttpApplicationFactory
  • 注:为了避免用户应用程序访问或者修改关键的操作系统数据,windows提供了两种处理器访问模式:用户模式(User Mode)和内核模式(Kernel Mode)。一般地,用户程序运行在User mode下,而操作系统代码运行在Kernel Mode下。Kernel Mode的代码允许访问所有系统内存和所有CPU指令。关于User ModeKernel Mode以及一些Windows底层的一些内容,推荐大家看看《Microsoft Windows InternalFour Edition Authored by Mark E.Russinovich & David A. Solomon

 

参考资料:

[原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II  

 

精简概括: 

ASP.Net处理HTTP请求的内部流程

 

 

posted @ 2011-12-29 15:49  苏先森1989  阅读(530)  评论(0编辑  收藏  举报