我昨晚部署了一个ASP.NET MVC应用程序,并发现将IIS7设置为集成模式进行部署的工作量较少。我的问题是有什么区别?使用其中一个有什么含义?
答案 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.NETHttpModule
基本上具有与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?
答案 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 modules
和ASP.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,就像经典模式一样。