IIS 5.x

IIS 5.x 运行在进程InetInfo.exe中,该进程寄宿着一个名为World Wide Web Publishing Service(简称W3SVC)的Windows服务,主要负责Http请求的监听、激活、管理工作进程、加载配置(通过从Metabase中加载相关配置信息)等。
当检测到Http请求时,IIS先根据扩展名判断是静态资源还是动态资源。对于前者会直接将文件内容相应给客户端,对于动态资源则通过扩展名从IIS的脚本映射(Script Map)中找到相应的ISAPI动态链接库。
ISAPI( Internet Server Application Programming Interface) 是一 套本地的( Native)Win32 API,是IIS和其他动态Web应用或平台之间的纽带。ISAPI定义在一个动态链接库( DLL)文件中,ASP. NET ISAPI 对应的DLL文件名称为aspnet_ isapi. dll,我们可以 在目录“% windir%\ Microsoft. NET\ Framework\{ version no}\” 中找到它。ISAPI支持ISAPI扩展( ISAPI Extension) 和ISAPI筛选( ISAPI Filter),前者是真正处理HTTP请求的接口,后者则可以在HTTP请求真正被处理之前查看、修改、转发或拒绝请求,比如IIS可以 利用ISAPI筛选进行请求的验证。
如果我们请求的是一个基于ASP. NET的资源类型,比如. aspx、. asmx、. svc 等,aspnet_ isapi. dll 会被 加载,ASP. NET ISAPI随后会创建 ASP. NET的工作进程( 如果该进程尚未启动)。对于IIS 5. x 来说,该工作进程为aspnet. exe。IIS进程与工作进程之间通过 命名管道( Named Pipes)进行通信。
在工作进程初始化过程中,NET运行时( CLR)会被加载以构建一个托管的环境。对于某个Web应用的初次请求,CLR会为其创建一个应用 程序 域( Application Domain)。在应用程序域中,HTTP运行时( HTTP Runtime)被加载并用 以创建相应的应用。 寄宿于IIS 5. x 的所有Web应用都运行在同一个进程(工作进程aspnet_wp. exe)的不同应用程序域中。
【IIS 5.x搭载在XP上,通过上面的介绍至少存在着两个方面的不足。】
1、ISAPI被加载到InetInfo.exe进程中,和工作进程之间是一种典型的跨进程通信方式,尽管采用命名管道,但是仍然会带来性能的瓶颈。
2、所有的ASP. NET应用运行在相同进程( aspnet_ wp. exe)的不同应用程序域中,基于应用程序域的隔离不能从根本上解决一个应用程序对另一个程序的影响,在更多的时候我们需要不同的Web应用运行在不同的进程中。
IIS 6.0

图中可以看到WASVC在IIS 6.0中从InetInfo.exe进程中脱离出来运行在另一个进程SvcHost.exe中。不过基本功能没有发生变化。
为了解决5.x中的两个问题,6.0将ISAPI直接加载到工作进程中,并引入了应用程序池的机制。我们可以为一个或多个Web应用创建一个应用程序池,每一个应用程序池对应一个独立的工作进程(w3wp.exe),运行在不同应用程序池中的应用提供基于进程级别的隔离机制。
除了上面两点改进外,还有一些值得称道的地方,其中最重要的一点是创建了一个名为Http.sys的Http监听器,其以驱动程序的形式运行在Windows的内核模式(Kernel Mode)下,它是TCP/IP网络子系统的一部分,从结构上看它属于TCP之上的一个网络驱动程序。
严格来讲,Http.sys已经不属于IIS的范畴,其配置信息也没有保存在IIS的元数据库(metabase),而是定义在注册表中。
Http.sys能带来如下好处
1、持续监听:由于它是一个网络驱动程序,始终处于运行状态,所以能对用户的Http请求及时作出反应。
2、更好的稳定性:它运行在操作系统内核模式下,不执行用户代码,不受web应用、工作进程和IIS进程的影响。
3、数据缓存:如果某个资源被频繁请求,它会将内容进行缓存,相应内容可直接相应后续请求。
当监听到Http请求时,Http.sys将其分发给W3SVC,后者解析出请求的UR,并根据从metabase获取的Url与Web应用之间的映射关系得到目标应用,进而得到目标应用的应用程序池或工作进程。如果工作进程不存在,他为该请求创建新的工作进程。在工作进程的初始化过程中,相应的ISAPI被加载。Asp.Net ISAPI负责进行CLR的加载、应用程序域的创建爱你和web应用的初始化等操作。
IIS 7.0

IIS 7.0在请求的监听和分发机制上进行了革命性的改进,主要体现在引入Windows进程激活服务(Windows Process Activation Service,WAS)分流了原来(IIS 6.0)W3SVC承载的部分功能。IIS 6.0中的W3SVC主要承载着如下三大功能。
1、Http请求接收:接收Http.sys监听到的Http请求。
2、配置管理:从元数据库(Metabase)中加载配置信息对相关组件进行配置。
3、进程管理:创建、回收、监控工作进程。
IIS 7.0将后两种功能实现到了WAS中,但接受Http请求的依然是W3SVC。WAS的引入为IIS 7.0童工了对非Http协议的支持, WAS利用 TCP监听器、 命名管道监听器和MSMQ监听器提供基于TCP、命名管道和MSMQ传输协议的监听支持。
浙公网安备 33010602011771号