[转帖] IIS经典模式和集成模式的区别
Posted jinanxiaolaohu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转帖] IIS经典模式和集成模式的区别相关的知识,希望对你有一定的参考价值。
在 IIS 7.0 中,应用程序池有两种运行模式:集成模式和经典模式。
https://blog.csdn.net/hongwei_23/article/details/44300923
这里面添加一个 stackoverflow的简介:
In classic mode IIS works h ISAPI extensions and ISAPI filters directly. And uses two pipe lines , one for native code and other for managed code. You can simply say that in Classic mode IIS 7.x works just as IIS 6 and you dont get extra benefits out of IIS 7.x features. In integrated mode IIS and ASP.Net are tightly coupled rather then depending on just two DLLs on Asp.net as in case of classic mode.
应用程序池模式会影响服务器处理托管代码请求的方式。
如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 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的功能划分为不同的组成部分。诸如StaticFileModule
、BasicAuthenticationModule
、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
文件。
以上是关于[转帖] IIS经典模式和集成模式的区别的主要内容,如果未能解决你的问题,请参考以下文章
IIS7.0集成模式和经典模式下,web.config中handlers和httpHandlers的区别以及用法。可加分。