IIS7中的「經典」和「集成」管道模式有什麼區別?

昨晚我在部署ASP.NET MVC應用程序時,發現將IIS7設置爲集成模式進行部署的工做量較小。 個人問題是有什麼區別? 以及使用其中一種的含義是什麼? html


#1樓

集成應用程序池模式 web

當應用程序池處於集成模式時,您能夠利用IIS和ASP.NET的集成請求處理體系結構。 當應用程序池中的工做進程接收到請求時,該請求將經過事件的有序列表。 每一個事件都調用必要的本機和託管模塊,以處理請求的各個部分並生成響應。 編程

在集成模式下運行應用程序池有不少好處。 首先,將IIS和ASP.NET的請求處理模型集成到一個統一的流程模型中。 此模型消除了先前在IIS和ASP.NET中重複的步驟,例如身份驗證。 此外,集成模式使託管功能可用於全部內容類型。 api

經典應用程序池模式 服務器

當應用程序池處於經典模式時,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中的新體系結構,該過程破壞了您的應用程序。 spa

摘自: IIS7中的DefaultAppPool和Classic .NET AppPool有什麼區別? .net

原始資料: IIS體系結構簡介 插件


#2樓

在經典模式下,IIS能夠直接使用ISAPI擴展和ISAPI篩選器。 而且使用兩條管道,一條用於本機代碼,另外一條用於託管代碼。 您能夠簡單地說,在IIS 7的經典模式下,IIS 7.x的工做原理與IIS 6相同,而且您沒有從IIS 7.x的功能中得到額外的好處。

在集成模式下,IIS和ASP.Net緊密耦合,而不是像傳統模式下那樣僅依賴於Asp.net上的兩個DLL。


#3樓

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

#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基本上具備與ISAPI篩選器相同的功能,而ASP.NET HttpHandler能夠具備與ISAPI擴展幾乎相同的功能。 在這種模式下,ASP.NET基本上是IIS的一部分。

相關文章
相關標籤/搜索