zl程序教程

您现在的位置是:首页 >  后端

当前栏目

IIS 7.0 确定托管管道模式

模式 iis 管道 确定 托管 7.0
2023-09-14 09:16:30 时间

        IIS7.0可以支持两种管道模式:一种是 IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,这种模式是由先前版本的 IIS 提供的。我们可以在应用程序池级设置管道模式,这项功能对 IIS 管理员尤其有用,因为这样既可以令一台服务器仅运行一种模式,也可以令两种模式同时运行于一台服务器上

        上述两种管道模式使用的 web.config 文件存在重大的区别,许多在经典管道模式下能够正常工作的 web.config 文件都无法在集成管道模式下正常工作。利用 AppCmd.exe,我们可以将经典管道模式下的配置文件格式自动转换为集成管道模式下的配置文件格式

经典模式

        在 IIS 6.0 中的经典模式中,ASP.NET 是一个添加到 IIS 中的 ISAPI。IIS 7.0之所以支持这种模式,是为了做到向后兼容。 但是,经典模式缺少许多集成模式才能提供的特性。在经典模式中,IIS 拥有自身的管道,这些管道可以通过创建 个ISAPI扩展进行扩充,而ISAPI 扩展是以难以开发而著称的。 ASP.NET 作为 个 ISAPI 扩展运行,只是 IIS 管道中的一项组成部分。下图很好地解释了上述情况。注意, 在这种情况下, ASP.NET 似乎是一种类似于马后炮的成果,仅当IIS处理ISAPI扩展时才能够发挥作用
在这里插入图片描述

        利用文件扩展名,可以判断使用哪个 ISAPI处理程序。例如,可以将扩展名为.aspx和.ascx 的文件映射到 aspnet_isapi.dll;并且将扩展名为.asp 的文件映射到 asp.dll,这样就可以处理传统的ASP页面;此外,将扩展名为.php的文件映射到php.dll,这样就可以处理PHP页面,前提是已经安装了php.dll

        此外,在IIS6.0和IIS7.0的经典模式中,某些特性是重复的。例如,错误处理就是一种重复的特性,因为 IIS 可以处理非 ASP.NET页面,而 ASP.NET 可以处理所有将处理程序映射为aspnet_isapi.dll的页面

        在 IIS 6.0 中,我们可以将所有文件类型都映射到 ASP.NET,但是这样做存在一些限制。最大的限制就是如何处理默认文档:一个默认文档仅当在 global.asax 中或者在一个HTTP 模块中被指定为默认文档时,这个默认文档才能够得到处理。某些自定义的配置需要使用 aspnet_isapi.dll 处理所有的文件类型。IIS 7.0 可以轻易地解决这个问题

        经典模式可以在无须修改web.config的前提下运行现有的Web网站,因此,如果使用的Web farm 中既包括 IIS 6.0服务器,也包括IIS 7.0服务器,或者因为某些原因无法将web.config文件转换为遵循新语法的web.config文件,那么就可以使用经典模式

集成模式

        利用集成模式,可以将ASP.NET 作为IIS的有机组成部分。现在,IIS 服务器的功能被划分为40多个模块,因此也就将IIS和ASP.NET的功能划分为不同的组成部分。诸如StaticFileModule、BasicAuthenticationModule、FormsAuthentication、Session、Profile,以及RoleManager等模块都是IIS管道的组成部分.注意,FormsAuthentication、Session、Profile,以及RoleManager原本就是ASP.NET的组成部分,与IIS并无关系。下图使用模块解释了IIS 管道。这些模块原本是ASP.NET 的组成部分,现在已经是IIS管道的有机组成部分
在这里插入图片描述

        IIS管道提供了二十多种事件,开发人员可以利用这些事件来扩展Web服务器的功能。实际上,通过创建定制模块,同时更新 applicationHost.config,可以仅使用自定义模块,而无须再使用微软公司提供的内置模块,我们可以将IIS7.0中的模块替换为自定义的模块

两种模式之间配置的区别

        IIS 7.0对配置文件进行了一些修改,Web开发人员可以使用这些修改内容。例如,<system.webServer>节点就是这样一项修改,无论是经典模式还是集成模式都可以识别<system.webServer>节点,同时,<system.webServer>节点既可以在applicationHost.config文件中设置,也可以在web.config文件中设置。<system.webScrver>节点既可以控制静态页面,也可以控制动态页面。即使在经典模式中,<system.webServer>节也具有重要作用,它可以帮助Web开发人员在web.config 文件中设置不同的IIS配置

        在集成模式中,HTTP 模块和 HTTP 处理程序不再定义于<system,web>中,而是定义于<system.webServer>中。如果在集成模式中运行一个包括了HTTP模块或HTTP处理程序的 web.config 文件,那么将会发生失效。幸运的是,微软公司已经详细规定了一个编号为500.22的错误信息,这个错误信息说明了如何一步步地迁移web.config文件这里就不再展示啦