首页 文章

IIS7中'classic'和'integrated'管道模式有什么区别?

提问于
浏览
460

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

5 回答

  • 5

    集成应用程序池模式当应用程序池处于集成模式时,您可以利用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中的新体系结构,该进程会破坏您的应用程序 .

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

    原始来源:Introduction to IIS Architecture

  • 101

    Classic Mode 通常,将Web应用程序从IIS 6.0移动到IIS 7.0经典模式只需要将应用程序放在以经典模式运行的应用程序池中 . 例如,当您使用安装IIS 7.0时,默认情况下Web服务器配置为在集成模式下运行 . 它还配置为在默认应用程序池下运行,该池名为DefaultAppPool . 要在经典模式下运行Web应用程序,请使用Classic.NETAppPool应用程序或创建配置为在经典模式下运行的新应用程序池 . 有关如何创建应用程序池的信息,请参阅创建应用程序池 . 在经典模式下运行的应用程序中实现IHttpModule接口的任何自定义模块仅会通知ASP.NET运行时处理的管道请求 . 例如,他们会收到有关.aspx页面请求的通知 . Classic模式的应用程序生命周期与IIS 6.0中ASP.NET的生命周期相同 . 有关更多信息,请参阅IIS 5.0和6.0的ASP.NET应用程序生命周期概述 . 如果在经典模式下运行的应用程序包含需要脚本映射来处理IIS中的自定义扩展的处理程序,则必须在httpHandler组和处理程序组中注册该处理程序 . 通过在handler元素中指定modules和scriptProcessor属性,将自定义文件扩展名映射到ASP.NET ISAPI扩展(Aspnet_isapi.dll) . 这些属性指定定义处理程序的模块是ISAPI扩展,并指定该扩展的路径 . 这就是经典模式下的IIS 7.0如何提供与早期版本的IIS的向后兼容性 . 但是,如果以集成模式运行应用程序,则必须删除模块和scriptProcessor属性 . 有关更多信息,请参见如何:在IIS中配置HTTP处理程序扩展 . 将Web应用程序从IIS 6.0移动到经典模式时,无法保证在没有更改的情况下在集成模式下工作 . 如果将应用程序从经典模式切换到集成模式(并更改任何自定义模块和处理程序),则可能必须进行其他更改才能使应用程序在集成模式下正确运行 . 本主题的下一部分介绍如何将应用程序移动到IIS 7.0集成模式 .

    Integrated Mode 不包含自定义模块或处理程序的Web应用程序通常在IIS 7.0中的集成模式下无需更改即可运行 . 依赖于自定义模块或处理程序的Web应用程序需要执行以下步骤使应用程序能够以集成模式运行:使用本主题后面的“将Web配置文件迁移到集成模式”部分中描述的方法之一,在Web.config文件的system.webServer部分中注册自定义模块和处理程序 . 仅在自定义模块的Init方法中为HttpApplication请求管道事件(如BeginRequest和EndRequest)定义事件处理程序 . 确保您已解决了将ASP.NET应用程序升级到IIS 7.0的"Known Differences Between Integrated Mode and Classic Mode"部分中讨论的任何问题:IIS 7.0集成模式和经典模式之间的差异 . 实现IHttpModule接口的模块称为托管代码模块,因为它们是使用.NET Framework构建的 . 托管代码模块可以在服务器级别或应用程序级别注册 . 本机代码模块是仅在服务器级别注册的DLL(非托管代码) . 核心ASP.NET功能(如会话状态和表单身份验证)在集成模式下实现为托管模块 . 将应用程序从“经典”模式移动到“集成”模式时,可以为经典模式保留自定义模块和处理程序注册,也可以将其删除 . 如果不删除经典模式中使用的httpModules和httpHandlers注册,则必须将validation元素的validateIntegratedModeConfiguration属性设置为false以避免错误 . validation元素是system.webServer元素的子元素 . 有关详细信息,请参阅ASP.NET与IIS 7.0集成中的"Disabling the migration message"部分 .

  • 11

    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不可见 .

    The major limitation of this model was that services provided by ASP.NET modules and custom ASP.NET application code were NOT available to non ASP.NET requests

    What's a SCRIPT MAP ?

    脚本映射用于将文件扩展名与请求该文件类型时执行的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 在所有阶段提供请求处理 This is the reason why NON ASP.NET content types (.html, static files ) can be handled by .NET modules.

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

    • 添加新的托管处理程序(IHttpHandler

  • 4

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

  • 620

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

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

相关问题