IIS7也用了好久了,關于Application Pool Integrate Mode 和 Classic Mode 究竟是什么也是懵懵懂懂,于是下決心去官網看了技術文檔,終于恍然大悟,特來分享一下。
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,就是這兩個模式的主要區別。
先說說IntegrateMode。在這個Mode下,當接收一個新的request的時候,request會傳送一個有序的事件列表,然后IIS會根據各個事件去調用需要的Native Module 和 Managed Module。就拿用戶認證來說吧,如果是一個asp.net應用程序,那么IIS會忽略Native Module,而去直接調用Managed Module。這樣便提高了處理request的效率,并且保證該應用程序的所有用戶認證都被.Net程序管理。
對于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好。
總結一下,通過上面不難看出,如果寫ASP.NET程序,運行在Integrate Mode是最好的選擇。Classic Mode更像是一種向下兼容的模式,如果你的應用在Integrate Mode下有問題,可以切換到該模式下一用。此外,Classic Mode的另外一個應用場景就是原生模塊的多樣,還拿認證來說,原生的就比.NET的多出不少,如果為了降低開發成本,也可運行在Classic Mode下,當然也要承擔上面所說的執行效率和安全問題。
新聞熱點
疑難解答