2011-08-16 28 views
1

我在這裏有點困惑。在IIS 5.0中,所有ASP.NET應用程序都在相同的工作進程(aspnet_wp.exe)內運行。各種應用程序由appdomain隔離。我相信一個appdomain的基本功能是在一個進程中提供應用程序隔離。現在到IIS 6.0。我已閱讀了有關IIS 6中的應用程序池的信息。許多站點都表示,在IIS 5.0中,當應用程序出現問題時,它會影響其他應用程序。但是,這不是由appdomains保護?我被告知IIS 6.0中的應用程序池可以防止這種意外。我在這裏有點困惑,應用程序池在IIS 5.0上提供的優勢究竟是什麼。我也被告知,在IIS 6工作進程隔離模式下,配置不同的應用程序池(從而不同的工作進程)是一個需要做的事情。但是,產生新的進程會增加內存的利用率,它如何被稱爲是一種表現事物的方式? HTTP.SYS如何知道將請求路由到相關的應用程序poool?IIS 5.0 - AppDomain

回答

0

不要讓應用程序池和AppDomains混淆。 AppDomain是進程內的隔離邊界。它們旨在隔離和提供正在執行的託管代碼的安全性。

應用程序池是IIS的一項功能,允許池處理多個站點的請求。他們通過在工作進程中運行多個AppDomain實例(aspnet_wp.exe或w3wp.exe)來處理此問題。雖然從技術上講,您可以在每個站點上運行多個AppDomain實例,但通常每個IIS應用程序只有一個AppDomain

如果您在單個應用程序池中有多個站點(並且共享這些工作進程),如果其中一個站點開始佔用大量資源,則這可以直接影響運行在同一應用程序池中的其他站點。

通過對邏輯組(應用程序池)中的站點進行分組(分隔),您可以更好地管理站點的行爲方式。

HTTP.SYS是一個內核模式驅動程序堆棧,它是Windows子系統的一部分。它提供內核模式下HTTP協議的管理(IIS6之前的版本在用戶模式下使用winsock)。通過在內核級別運行HTTP.SYS,如果工作進程失敗,請求可以排隊,然後轉發到將要啓動的新工作進程。

當您在IIS6中創建站點時,它會使用HTTP.SYS註冊該站點,然後可以將請求發送到相應的輔助進程。

+0

感謝您的解釋 –

0

該AppDomain是關於共享數據 http://msdn.microsoft.com/en-us/library/system.appdomain.aspx 而在IIS 6中,您可以將多個應用程序附加到應用程序池。如果在同一應用程序池中有兩個應用程序,並且其中一個應用程序不斷崩潰,則會影響另一個應用程序,IIS會因爲不穩定而決定關閉整個應用程序池。

因此,如果您有關鍵的應用程序,建議將它們保留在它們自己的應用程序池中。如果您在IIS多個應用程序,你的路線與hostheaders(或額外的外部IIP地址)的請求

是建議各生產網站的應用程序池的額外資源:http://forums.iis.net/t/1151476.aspx

一個很好的資源,其解釋的區別介於5.0和6.0之間,具有隔離性: http://www.tech-faq.com/understanding-iis-5-and-iis-6.html