繁体   English   中英

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

[英]What is the difference between 'classic' and 'integrated' pipeline mode in IIS7?

昨晚我在部署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基本上具有与ISAPI筛选器相同的功能,而ASP.NET HttpHandler可以具有与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并将应用程序分配给集成模式下的应用程序池之前,请确保在集成模式下测试现有应用程序的兼容性。 仅当应用程序无法在集成模式下工作时,才应将其添加到经典模式下的应用程序池中。 例如,您的应用程序可能依赖于从IIS传递到托管运行时的身份验证令牌,并且由于IIS 7.0中的新体系结构,该过程破坏了您的应用程序。

摘自: IIS7中的DefaultAppPool和Classic .NET AppPool有什么区别?

原始资料: IIS体系结构简介

IIS 6.0和早期版本:

ASP.NET通过ISAPI扩展,C API(基于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处理程序相关联。 脚本映射还具有一个可选设置,该设置可在允许处理请求之前验证与请求关联的物理文件是否存在

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

IIS 7及更高版本

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

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

这意味着IIS 7会处理任何内容类型的请求,同时NON ASP.NET Modules / native IIS modulesASP.NET modules都在所有阶段都提供请求处理。 这就是NON ASP.NET内容类型( .html,静态文件)可以由.NET模块处理。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM