IIS7.0应用程序池集成和经典的区别

在 IIS 7.0 中,应用程序池有两种运行模式:集成模式和经典模式。

应用程序池模式会影响服务器处理托管代码请求的方式。

  • 集成模式: 服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求
  • 经典模式: 服务器会继续通过 Aspnet_isapi.dll 路由托管代码请求,其处理请求的方式就像应用程序在 IIS 6.0 中运行一样

经典模式

指的是与IIS 6或者之前版本保持兼容的一种模式

在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

此外,在IIS 6.0和IIS 7.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集成,甚至允许我们在ASP.NET中编写一些功能(例如Module)来改变IIS的行为(扩展)。集成的好处是,不再通过ISAPI的方式,提高了速度和稳定性。至于扩展,则可以使得我们对于IIS以及其他类型的请求有更多的控制。

利用集成模式,可以将ASP.NET作为IIS的有机组成部分。现在,IIS服务器的功能被划分为40多个模块,因此也就将IIS和ASP.NET的功能划分为不同的组成部分。诸如StaticFileModuleBasicAuthenticationModuleFormsAuthenticationSessionProfile,以及RoleManager等模块都是IIS管道的组成部分。

注意,FormsAuthenticationSessionProfile,以及RoleManager原本就是ASP.NET的组成部分,与IIS并无关系。

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

经典模式和集成模式之间配置的区别

在集成模式中,HTTP模块和HTTP处理程序不再定义于中,而定义于中。如果在集成模式中运行一个包括了HTTP模块或HTTP处理程序的web.config文件,那么将会发生失效。

因为集成模式下,要想运行HTTP处理程序,必须在配置文件中添加一个节点代替经典模式下的节点。进行这种转换后,程序HTTP处理程序成功执行。

为了同时使用经典模式和集成模式,我们可以修改一下配置文件:


IIS7.0应用程序池集成和经典的区别_第1张图片
12165409-f670046a260f47d4a86577a1670877fe.jpg

文章参考:

  • IIS中同时满足集成模式和经典模式
  • IIS经典模式和集成模式的区别

你可能感兴趣的:(IIS7.0应用程序池集成和经典的区别)