IIS经典模式和集成模式的区别
在 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
文件,那么就可以使用经典模式。
一些老的.net版本或者asp程序,一般需要进行经典模式配置才能运行。
集成模式:
这种全新的模式,允许我们将ASP.NET更好地与IIS集成,甚至允许我们在ASP.NET中编写一些功能(例如Module)来改变IIS的行为(扩展)。集成的好处是,不再通过ISAPI的方式,提高了速度和稳定性。至于扩展,则可以使得我们对于IIS以及其他类型的请求有更多的控制。
利用集成模式,可以将ASP.NET作为IIS的有机组成部分。现在,IIS服务器的功能被划分为40多个模块,因此也就将IIS和ASP.NET的功能划分为不同的组成部分。诸如StaticFileModule
、BasicAuthenticationModul
、FormsAuthentication
、Session
、Profile
,以及RoleManager
等模块都是IIS管道的组成部分。
注意,FormsAuthentication
、Session
、Profile
,以及RoleManager
原本就是ASP.NET的组成部分,与IIS并无关系。
IIS管道提供了二十多种事件,开发人员可以利用这些事件来扩展Web服务器的功能。实际上,通过创建定制模块,同时更新applicationHost.config
,可以仅使用自定义模块,而无须再使用微软公司提供的内置模块,我们可以将IIS 7.0中的模块替换为自定义的模块。
经典模式和集成模式之间配置的区别
IIS 7.0对配置文件进行了一些修改,Web开发人员可以使用这些修改内容。例如,节就是这样一项修改,无论是经典模式还是集成模式都可以识别节,同时,节既可以在applicationHost.config
文件中设置,也可以在web.config
文件中设置。节既可以控制静态页面,也可以控制动态页面。即使在经典模式中,节也具有重要作用,它可以帮助Web开发人员在web.config
文件中设置不同的IIS配置。
在集成模式中,HTTP模块和HTTP处理程序不再定义于中,而是定义于中。如果在集成模式中运行一个包括了HTTP模块或HTTP处理程序的web.config
文件,那么将会发生失效。幸运的是,微软公司已经详细规定了一个编号为500.22的错误信息,这个错误信息说明了如何一步步地迁移web.config
文件。