当前位置:  开发笔记 > 后端 > 正文

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

如何解决《IIS7中的"经典"和"集成"管道模式有什么区别?》经验,为你挑选了4个好方法。

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



1> Mehrdad Afsh..:

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


是否比经典慢?

2> BrainCoder..:

集成应用程序池模式

当应用程序池处于集成模式时,您可以利用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体系结构简介


最后一段中的关键句子:**"如果应用程序无法在集成模式下工作,则只应在经典模式下将应用程序添加到应用程序池."**
为什么它无法在集成模式下工作?
@JsonStatham - 其中一个原因是集成模式无法使用ASP.NET模拟(站点> YourSite> IIS>身份验证).如果您有Intranet站点并且正在使用Windows身份验证,则这是一个重要的考虑因素.[链接](http://stackoverflow.com/questions/12966286/impersonate-domain-user-with-integrated-pipeline)

3> R.C..:

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请求

什么是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)



4> 小智..:

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

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

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有