IIS7对于IIS6的改进及配置系统的差异

  在IIS 6中asp.net的运行机制文章中,我们大致了解了HTTP请求在IIS6中的流转以及asp.net在IIS6中是如何运行的。但比较,IIS6毕竟是10年前的产物,尽管现在还有很多asp.net应用是部署在win2003+iis6平台下,但我相信,IIS7+会越来越受到人们的喜爱。就我自己而言,我是用上了win7才开始使用IIS7.5的,随着不断使用,我觉得IIS7+是到目前为止用得最爽的一个版本。

  据说IIS7对于IIS6有很多改进的地方(例如模块化,更好的安全性和扩展性),但最令我印象深刻的是两点改变:

  一:IIS7对asp.net的集成。

  二:IIS7的配置系统(相对于IIS6)的改变。

  IIS7对asp.net的集成

  在IIS6中,asp.net是以ISAPI扩展(isapi extension)的形式被运行的,即aspnet_isapi.dll,某程度上asp.net对于IIS6只是一个插件,asp.net之于iis6就像asp之于iis6或者php之于iis6一样,都是ISAPI扩展。这样并不能最大限度地发挥asp.net的功能。例如正如我上次那篇博客使用http module 对url进行重写的尝试中遇到的问题:我需要截获客户端发来的请求,并对请求进行重写。在IIS6中,请求的截获动作只能被限制在IIS加载aspnet_isapi.dll后,也就是说:如果该请求不是明确针对asp.net资源的请求(比如这个请求只是一个静态文件的请求,如www.somenet.com/index.html或者www.somenet.com/img1.jpg),我们就不能在代码中编写截获请求的逻辑,因为IIS6是根据URL的后缀来映射并加载对应的isapi的,如果一个请求的url是:www.somenet.com/index.aspx,根据".aspx"这个后缀,IIS6可以得知这个请求是针对asp.net资源的,应该加载aspnet_isapi.dll创建.net运行时并运行asp.net页面的代码,但很明显,诸如"www.somenet.com/index.html"这种请求,IIS6通常认为不是对asp.net资源的请求,因此不会加载aspnet_isapi.dll来运行asp.net,我们即使在asp.net页面中编写了拦截请求的代码,也不会被执行。当然,这里我说通常是有原因的,因为我们可以在IIS6中添加通配符程序映射的方式,或者在web.config中对某种请求手动添加处理程序的方式,来迫使IIS6为非asp.net资源类型的请求加载aspnet_isapi.dll。IIS6中对请求的执行流程如下

  但一切在IIS7中变得很不同。在IIS7中,asp.net不再是以一个isapi的形式存在于IIS中,而是集成到IIS核心中。先看一下IIS7中请求的处理流程:

  IIS7中对asp.net的请求不再是分两条处理管道,而是将asp.net和IIS集成起来,这样做的好处有很多,包括统一了请求验证工作,加强了asp.net对于请求的控制能力等等。在IIS7中,asp.net不再像IIS6一样只限定于aspnet_isapi.dll中,而是被解放出来,从IIS接收到HTTP请求开始,即进入asp.net的控制范围,as.net可以存在于一个请求在IIS中各个处理阶段。甚至可以为部署在IIS7中的PHP应用提供基于asp.net的验证身份验证功能(参考:http://msdn.microsoft.com/zh-cn/magazine/cc135973.aspx)。

 

  IIS7的配置系统相对于IIS6的改变

   IIS7中,另一个非常大的改进就是它的配置系统。在IIS6中,配置信息存储在metabase.xml文件中(在%windir%\system32\inetsrv文件夹中),而IIS7里面,配置信息被存储在applicationHost.config中(在%windir%\system32\inetsrv\config文件夹中)。这可不是简单的文件重命名,而是对IIS配置系统的大规模重构。事实上,如果接触过IIS6中的metabase.xml,就知道这个文件的配置信息是非常难于管理的。里面存在大量的基于内存结构的配置信息,而且组织结构对于我们来说也不是那么友好,难以阅读。而IIS7对整个配置系统作了改进,以一种我们(尤其是.net开发人员)非常熟悉的结构来存储配置信息(看上去类似于web.config或者app.config文件)。IIS团队对IIS7配置系统作出如此大规模改变是为了改善提高IIS7的性能,伸缩性以及更易于管理。

  IIS6与IIS7在配置系统上的对比:

 特点  IIS6  IIS7  对比
 外部代理配置  在IIS6中,对于IIS本身的配置是保存在metabase.xml中,只能被拥有系统管理员权限的用户修改。  IIS7的配置信息保存在applicationHost.config中,但也可以在web.config里面对IIS进行配置。  
 组织结构  metabase.xml中的配置属性在组织上较为零散。  applicationHost.config是类似于web.config风格的组织结构配置方式,每个配置节和元素都以一种更友好的结构呈现。  配置条目更加符合逻辑,配置文件更容易阅读和管理。
 配置的同步问题  IIS6的配置是基于内存的,同时也呈现在metabase.xml文件,有可能出现同步问题,即:内存中的配置值与metabase.xml所呈现的不同  IIS7的配置完全是基于配置文件的。  
 对xml schema扩展  很难对metabase.xml进行扩展  基于IIS_Schema.xml,更容易对配置文件进行扩展定制。  

具体参考:http://programming4.us/website/3464.aspx或者参考《Internet Information Services (IIS) 7.0 Resource Kit 》一书

posted on 2013-02-25 18:37  wyman25  阅读(1317)  评论(0编辑  收藏  举报

导航