昨晚我在部署ASP.NET MVC应用程序时,发现将IIS7设置为集成模式进行部署的工作量较小。我的问题是有什么区别?以及使用其中一种的含义是什么?
昨晚我在部署ASP.NET MVC应用程序时,发现将IIS7设置为集成模式进行部署的工作量较小。我的问题是有什么区别?以及使用其中一种的含义是什么?
Answers:
经典模式(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的一部分。
HttpModules
方法/事件是否iis7
比in中的功能更多iis6
?你能详细说明一下吗?
集成应用程序池模式
当应用程序池处于集成模式时,您可以利用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扩展气泡内完全执行AND ONLY 在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 Server的核心功能集成在一起,提供了一个统一的(单个)请求处理管道,该管道暴露给称为模块(IHttpModules)的本机组件和托管组件。
这意味着IIS 7处理到达任何内容类型的请求,并同时处理所有阶段的内容NON ASP.NET Modules / native IIS modules
并ASP.NET modules
提供请求处理。 这就是.NET模块可以处理NON ASP.NET内容类型(.html,静态文件)的原因。 。
IHttpModule
能够对所有应用程序内容执行的新托管模块(),并为您的应用程序提供一组增强的请求处理服务。IHttpHandler
)