基本介紹
- 中文名:應用程式域
- 外文名:application domain AppDomain
- 套用:應用程式
- 對象:同一台計算機
簡介,託管代碼,隔離應用程式,隔離,
簡介
以前使用進程邊界來隔離在同一台計算機上運行的應用程式。每一個應用程式被載入到單獨的進程中,這樣就將該應用程式與在同一台計算機上運行的其他應用程式相隔離。
隔離這些應用程式的原因在於記憶體地址是與進程相關的;在目標進程中,不能通過任何有意義的方式使用從一個進程傳遞到另一個進程的記憶體指針。此外,您不能在兩個進程間進行直接調用。您必須代之以使用代理,它提供一定程度的間接性。
託管代碼
託管代碼必須先通過一個驗證過程,然後才能運行(除非管理員已授權跳過該驗證)。此驗證過程將驗證以下內容:這些代碼是否會嘗試訪問無效的記憶體地址?是否會嘗試執行某些導致進程(該代碼運行時所在的進程)無法正常進行的其他操作?通過此驗證測試的代碼將被認為是類型安全的。由於公共語言運行庫能夠驗證代碼是否為類型安全的代碼,所以它可以提供與進程邊界一樣大的隔離級別,而其性能開銷則要低得多。
應用程式域提供安全而通用的處理單元,公共語言運行庫可使用它來提供應用程式之間的隔離。您可以在具有同等隔離級別(存在於單獨的進程中)的單個進程中運行幾個應用程式域,而不會造成進程間調用或進程間切換等方面的額外開銷。在一個進程內運行多個應用程式的能力顯著增強了伺服器的可伸縮性。
隔離應用程式
隔離應用程式對於應用程式安全也是十分重要的。例如,您可以在單個瀏覽器進程中運行幾個 Web 應用程式中的控制項,同時使這些控制項不能訪問彼此的數據和資源。
應用程式域所提供的隔離具有以下優點:
在一個應用程式中出現的錯誤不會影響其他應用程式。因為類型安全的代碼不會導致記憶體錯誤,所以使用應用程式域可以確保在一個域中運行的代碼不會影響進程中的其他應用程式。
能夠在不停止整個進程的情況下停止單個應用程式。使用應用程式域使您可以卸載在單個應用程式中運行的代碼。
注意 不能卸載單個程式集或類型。只能卸載整個域。
隔離
在一個應用程式中運行的代碼不能直接訪問其他應用程式中的代碼或資源。為了強制實施此隔離,公共語言運行庫禁止在不同應用程式域中的對象之間進行直接調用。要在各域之間傳遞對象,可以複製這些對象,或通過代理訪問這些對象。如果複製對象,那么對該對象的調用為本地調用。也就是說,調用方和被引用的對象位於同一應用程式域中。如果通過代理訪問對象,那么對該對象的調用為遠程調用。在此情況下,調用方和被引用的對象位於不同的應用程式域中。域間調用所採用的遠程調用結構與兩個進程間的調用或兩台計算機間的調用結構相同。
向代碼授予的許可權可以由代碼運行所在的應用程式域來控制。