Asp.net ';经典';和';集成';IIS7中的管道模式?

Asp.net ';经典';和';集成';IIS7中的管道模式?,asp.net,asp.net-mvc,iis,iis-7,integrated-pipeline-mode,Asp.net,Asp.net Mvc,Iis,Iis 7,Integrated Pipeline Mode,昨晚我部署了一个ASP.NET MVC应用程序,发现将IIS7设置为集成模式部署起来工作量更小。我的问题是有什么区别?使用一种或另一种的含义是什么?经典模式(IIS6及以下版本中唯一的模式)是一种IIS仅直接与ISAPI扩展和ISAPI过滤器一起工作的模式。事实上,在这种模式下,ASP.NET只是一个ISAPI扩展(aspnet_ISAPI.dll)和一个ISAPI过滤器(aspnet_filter.dll)。IIS只是将ASP.NET视为在ISAPI中实现的一个外部插件,并将其作为一个黑匣子使

昨晚我部署了一个ASP.NET MVC应用程序,发现将IIS7设置为集成模式部署起来工作量更小。我的问题是有什么区别?使用一种或另一种的含义是什么?

经典模式(IIS6及以下版本中唯一的模式)是一种IIS仅直接与ISAPI扩展和ISAPI过滤器一起工作的模式。事实上,在这种模式下,ASP.NET只是一个ISAPI扩展(aspnet_ISAPI.dll)和一个ISAPI过滤器(aspnet_filter.dll)。IIS只是将ASP.NET视为在ISAPI中实现的一个外部插件,并将其作为一个黑匣子使用(仅当需要向ASP.NET发出请求时)。在这种模式下,ASP.NET与PHP或其他IIS技术没有太大区别

另一方面,集成模式是IIS7中的一种新模式,其中IIS管道与ASP.NET请求管道紧密集成(即完全相同)。ASP.NET可以看到它想要的每一个请求,并在此过程中进行操作。ASP.NET不再被视为外部插件。它在IIS中完全混合和集成。在这种模式下,ASP.NET
HttpModule
s基本上具有与ISAPI过滤器相同的功能,并且ASP.NET
HttpHandler
s具有与ISAPI扩展几乎相同的功能。在这种模式下,ASP.NET基本上是IIS的一部分

集成应用程序池模式

当应用程序池处于集成模式时,您可以利用 介绍了IIS和ASP.NET的集成请求处理体系结构。 当应用程序池中的工作进程收到请求时 请求通过事件的有序列表传递。每个事件调用 必要的本机和托管模块来处理 请求并生成响应

在集成环境中运行应用程序池有几个好处 模式首先介绍了IIS和ASP.NET的请求处理模型 集成到统一的流程模型中。此模型消除了步骤 以前在IIS和ASP.NET中复制的,例如 认证。此外,集成模式还支持可用性 将托管功能添加到所有内容类型

经典应用程序池模式

当应用程序池处于经典模式时,IIS 7.0将处理请求 与IIS 6.0工作进程隔离模式相同。ASP.NET请求先执行 通过IIS中的本机处理步骤,然后路由到 Aspnet_isapi.dll,用于在托管数据库中处理托管代码 运行时。最后,请求通过IIS路由回以发送 答复

这种IIS和ASP.NET请求处理模型的分离 导致某些处理步骤重复,例如 身份验证和授权。此外,托管代码功能, 例如表单身份验证,仅对ASP.NET可用 应用程序或已为其映射所有脚本的应用程序 由aspnet_isapi.dll处理的请求

请确保在中测试现有应用程序的兼容性 将生产环境升级到IIS 7.0之前的集成模式 以及以集成模式将应用程序分配给应用程序池。 您应该只向Classic中的应用程序池添加应用程序 模式,如果应用程序无法在集成模式下工作。例如 您的应用程序可能依赖于从IIS传递的身份验证令牌 到托管运行时,并且由于IIS 7.0中的新体系结构, 这个过程破坏了你的申请

摘自:


原始来源:

在经典模式下,IIS直接使用ISAPI扩展和ISAPI过滤器。并使用两条管道,一条用于本机代码,另一条用于托管代码。您可以简单地说,在经典模式下,IIS7.x的工作原理与IIS6相同,您不会从IIS7.x的功能中获得额外的好处

在集成模式下,IIS和ASP.Net紧密耦合,而不像经典模式那样只依赖于ASP.Net上的两个DLL

IIS 6.0及以前的版本:

ASP.NET通过ISAPI扩展(基于C编程语言的API)与IIS集成,并公开了自己的应用程序和请求处理模型

这有效地公开了两个独立的服务器(请求/响应)管道,一个用于本机ISAPI过滤器和扩展组件,另一个用于托管应用程序组件。ASP.NET组件将完全在ASP.NET ISAPI扩展气泡内执行,并且仅用于IIS脚本映射配置中映射到ASP.NET的请求

对非ASP.NET内容类型的请求:-图像、文本文件、HTML页面和无脚本ASP页面已由IIS或其他ISAPI扩展处理,并且对ASP.NET不可见

此模型的主要限制是ASP.NET模块和自定义ASP.NET应用程序代码提供的服务不可用于非ASP.NET请求

什么是脚本映射?

脚本映射用于将文件扩展名与请求该文件类型时执行的ISAPI处理程序相关联。脚本映射还有一个可选设置,用于在允许处理请求之前验证与请求关联的物理文件是否存在

一个很好的例子是

IIS 7及以上版本

iIS 7和以上已从基础上重新设计,提供一种全新的基于C++ API的ISAPI。p> IIS 7.0及更高版本将ASP.NET运行时与Web服务器的核心功能集成在一起,提供了一个统一(单一)的请求处理管道,该管道公开给称为模块(IHttpModules)的本机和托管组件

这意味着IIS 7使用
非ASP.NET模块/本机IIS模块处理针对任何内容类型的请求