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

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

 【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 Mode Kernel Mode 以及一些 Windows 底层的一些内容,推荐大家看看《 Microsoft Windows Internal Four Edition  Authored by Mark E.Russinovich & David A. Solomon

 

参考资料:

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

 

精简概括: 

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

 

 

你可能感兴趣的:(asp.net)