IIS7中的“经典”和“集成”管道模式有什么区别?

时间:2009-04-03 23:10:49

标签: asp.net asp.net-mvc iis iis-7 integrated-pipeline-mode

我昨晚部署了一个ASP.NET MVC应用程序,并发现将IIS7设置为集成模式进行部署的工作量较少。我的问题是有什么区别?使用其中一个有什么含义?

4 个答案:

答案 0 :(得分:630)

经典模式(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基本上具有与ISAPI过滤器相同的功能,并且ASP.NET HttpHandler可以具有与ISAPI扩展可能具有的几乎相同的功能。在这种模式下,ASP.NET基本上是IIS的一部分。

答案 1 :(得分:110)

  

集成应用程序池模式

     

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

     

在Integrated中运行应用程序池有几个好处   模式。首先是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中的新体系结构,   这个过程打破了你的申请。

取自:What is the difference between DefaultAppPool and Classic .NET AppPool in IIS7?

原始来源:Introduction to IIS Architecture

答案 2 :(得分:11)

  

IIS 6.0和以前的版本:

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

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

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

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

什么是SCRIPT MAP?

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

一个很好的例子可以是seen here

  

IIS 7及以上

IIS 7.0及更高版本已经从头开始重新设计,以提供基于ISAPI的全新C ++ API。

IIS 7.0及更高版本将ASP.NET运行时与Web服务器的核心功能集成在一起,提供统一的(单个)请求处理管道,该管道暴露给称为模块的本机和托管组件(IHttpModules)

这意味着IIS 7处理针对任何内容类型到达的请求,NON ASP.NET Modules / native IIS modulesASP.NET modules在所有阶段提供请求处理 这是.NET模块可以处理NON ASP.NET内容类型(.html,静态文件)的原因。

  • 您可以构建能够为所有应用程序内容执行的新托管模块(IHttpModule),并为您的应用程序提供一组增强的请求处理服务。
  • 添加新的托管处理程序(IHttpHandler

答案 3 :(得分:5)

在经典模式下,IIS直接使用ISAPI扩展和ISAPI过滤器。并使用两个管道线,一个用于本机代码,另一个用于托管代码。你可以简单地说,在经典模式下,IIS 7.x就像IIS 6一样工作,你不会从IIS 7.x功能中获得额外的好处。

在集成模式下,IIS和ASP.Net紧密耦合,而不是依赖于Asp.net上的两个DLL,就像经典模式一样。