IIS 与ASPNET
通过上面的介绍我们可以看出IIS x至少存在着如下两个方面的不足
ISAPI动态连接库被加载到InetInfoexe进程中它和工作进程之间是一种典型的跨进程通信方式尽管采用命名管道但是仍然会带来性能的瓶颈
所有的ASPNET应用运行在相同进程(aspnet_wpexe)中的不同的应用程序域中基于应用程序域的隔离不能从根本上解决一个应用程序对另一个程序的影响在更多的时候我们需要不同的Web应用运行在不同的进程中
为了解决第一个问题IIS 将ISAPI动态连接库直接加载到工作进程中为了解决第二个问题引入了应用程序池(Application Pool)的机制我们可以为一个或多个Web应用创建应用程序池由于每一个应用程序池对应一个独立的工作进程从而为运行在不同应用程序池中的Web应用提供基于进程的隔离级别IIS 的工作进程名称为wwpexe
除了上面两点改进之外IIS 还有其他一些值得称道的地方其中最重要的一点就是创建了一个名为HTTPSYS的HTTP监听器HTTPSYS以驱动程序的形式运行在Windows的内核模式(Kernel Mode)下它是Windows 的TCP/IP网络子系统的一部分从结构上看它属于TCP之上的一个网络驱动程序
严格地说HTTPSYS已经不属于IIS的范畴了所以HTTPSYS的配置信息也没有保存在IIS的元数据库(Metabase)中而是定义在注册表中HTTPSYS的注册表项的路径为HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTPHTTPSYS能够带来如下的好处
持续监听由于HTTPSYS是一个网络驱动程序始终处于运行状态对于用户的HTTP请求能够及时作出反应
更好的稳定性HTTPSYS运行在操作系统内核模式下并不执行任何用户代码所以其本身不会受到Web应用工作进程和IIS进程的影响
内核模式下数据缓存如果某个资源被频繁请求HTTPSYS会把响应的内容进行缓存缓存的内容可以直接响应后续的请求由于这是基于内核模式的缓存不存在内核模式和用户模式的切换响应速度将得到极大的改进
图体现了IIS的结构和处理HTTP请求的流程与IIS x不同WSVC从InetInfoexe进程脱离出来(对于IIS 来说InetInfoexe基本上可以看作单纯的IIS管理进程)运行在另一个进程SvcHostexe中不过WSVC的基本功能并没有发生变化只是在功能的实现上作了相应的改进与IIS x一样元数据库(Metabase)依然存在于InetInfoexe进程中
图 IIS 与ASPNET
当HTTPSYS监听到用户的HTTP请求时将其分发给WSVCWSVC解析出请求的URL并根据从Metabase获取的URL与Web应用之间的映射关系得到目标应用并进一步得到目标应用运行的应用程序池或工作进程如果工作进程不存在(尚未创建或被回收)则为该请求创建新的工作进程我们将工作进程的这种创建方式称为请求式创建在工作进程的初始化过程中相应的ISAPI动态连接库被加载对于ASPNET应用来说被加载的ISAPIdll为aspnet_isapidllASPNET ISAPI再负责进行CLR的加载应用程序域的创建和Web 应用的初始化等操作
返回目录ASPNET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化让你的Java程序更快更稳定
Visual C++音频/视频技术开发与实战