IIS7也用了很久了,關於Application Pool Integrate Mode 和 Classic Mode 到底是什麼也是懵懵懂懂,因而下決心去官網看了技術文檔,終於恍然大悟,特來分享一下。api
IIS從7開始引入了Application Pool,解決了IIS6設置在Server上的問題(由於設置在Server上,所以你不能讓兩個application跑在兩個mode下)。而且增長了模式設置,分別爲 Integate Mode 和 Classic Mode。那麼這兩個模式有什麼區別呢,下面我慢慢道來。安全
首先要先說下IIS的Module,IIS7開始引入了Module,每一個Module有各自的功用,Module包含IIS本身攜帶的,稱爲Native Module,和外來引入了。而由.NET引入的Module稱爲Managed Module。若是你仔細查看Native Module和Managed Module,你會發現二者是有重複的,特別是用戶認證這裏,而如何調用這些Module,就是這兩個模式的主要區別。app
先說說Integrate Mode。在這個Mode下,當接收一個新的request的時候,request會傳送一個有序的事件列表,而後IIS會根據各個事件去調用須要的Native Module 和 Managed Module。就拿用戶認證來講吧,若是是一個ASP.NET應用程序,那麼IIS會忽略Native Module,而去直接調用Managed Module。這樣便提升了處理request的效率,而且保證該應用程序的全部用戶認證都被.Net程序管理。spa
對於Classic Mode,其實和IIS6 中的isolation mode是同樣的,一個request來了,IIS先調用Native Module處理,而後若是須要運行託管代碼,則調用aspnet_isapi.dll去解析,這時才調用Managed Module。若是你用了Form的認證方式,那麼要先通過Native Module的一次認證,而後在調用託管代碼的時候再運行一次Managed Module認證,這就重複了兩次。此外,若是一個資源不運行託管代碼,那麼託管代碼的認證是不會運行了,以Form方式爲例,若是調用一個靜態資源,則只會調用IIS的原生認證,而不會使用Form認證。可見Classic Mode在效率和部署配置上不如Integrate Mode好。orm
總結一下,經過上面不難看出,若是寫ASP.NET程序,運行在Integrate Mode是最好的選擇。Classic Mode更像是一種向下兼容的模式,若是你的應用在Integrate Mode下有問題,能夠切換到該模式下一用。此外,Classic Mode的另一個應用場景就是原生模塊的多樣,還拿認證來講,原生的就比.NET的多出很多,若是爲了下降開發成本,也可運行在Classic Mode下,固然也要承擔上面所說的執行效率和安全問題。blog