一種邊界,它由公共語言執行庫圍繞同一應用程式範圍內建立的物件建立(即,從應用程式入口點開始,沿著物件啟用的序列的任何位置)。應用程式域有助於將在乙個應用程式中建立的物件與在其他應用程式中建立的物件隔離,以使執行時行為可以預知。在乙個單獨的程序中可以存在多個應用程式域。
以前使用程序邊界來隔離在同一臺計算機上執行的應用程式。每乙個應用程式被載入到單獨的程序中,這樣就將該應用程式與在同一臺計算機上執行的其他應用程式相隔離。
隔離這些應用程式的原因在於記憶體位址是與程序相關的;在目標程序中,不能通過任何有意義的方式使用從乙個程序傳遞到另乙個程序的記憶體指標。此外,您不能在兩個程序間進行直接呼叫。您必須代之以使用**,它提供一定程度的間接性。
託管**必須先通過乙個驗證過程,然後才能執行(除非管理員已授權跳過該驗證)。此驗證過程將驗證以下內容:這些**是否會嘗試訪問無效的記憶體位址?是否會嘗試執行某些導致程序(該**執行時所在的程序)無法正常進行的其他操作?通過此驗證測試的**將被認為是型別安全的。由於公共語言執行庫能夠驗證**是否為型別安全的**,所以它可以提供與程序邊界一樣大的隔離級別,而其效能開銷則要低得多。
應用程式域提供安全而通用的處理單元,公共語言執行庫可使用它來提**用程式之間的隔離。您可以在具有同等隔離級別(存在於單獨的程序中)的單個程序中執行幾個應用程式域,而不會造成程序間呼叫或程序間切換等方面的額外開銷。在乙個程序內執行多個應用程式的能力顯著增強了伺服器的可伸縮性。
隔離應用程式對於應用程式安全也是十分重要的。例如,您可以在單個瀏覽器程序中執行幾個 web 應用程式中的控制項,同時使這些控制項不能訪問彼此的資料和資源。
應用程式域所提供的隔離具有以下優點:
在乙個應用程式中出現的錯誤不會影響其他應用程式。因為型別安全的**不會導致記憶體錯誤,所以使用應用程式域可以確保在乙個域中執行的**不會影響程序中的其他應用程式。
能夠在不停止整個程序的情況下停止單個應用程式。使用應用程式域使您可以解除安裝在單個應用程式中執行的**。
注意 不能解除安裝單個程式集或型別。只能解除安裝整個域。
在乙個應用程式中執行的**不能直接訪問其他應用程式中的**或資源。為了強制實施此隔離,公共語言執行庫禁止在不同應用程式域中的物件之間進行直接呼叫。要在各域之間傳遞物件,可以複製這些物件,或通過**訪問這些物件。如果複製物件,那麼對該物件的呼叫為本地呼叫。也就是說,呼叫方和被引用的物件位於同一應用程式域中。如果通過**訪問物件,那麼對該物件的呼叫為遠端呼叫。在此情況下,呼叫方和被引用的物件位於不同的應用程式域中。域間呼叫所採用的遠端呼叫結構與兩個程序間的呼叫或兩台計算機間的呼叫結構相同。
**行為的作用範圍由它執行所在的應用程式決定。換言之,應用程式域將提**用程式版本策略等配置設定、它所訪問的任意遠端程式集的位置,以及載入到該域中的程式集的位置資訊。
向**授予的許可權可以由**執行所在的應用程式域來控制。
應用程式域
一種邊界,它由公共語言執行庫圍繞同一應用程式範圍內建立的物件建立 即,從應用程式入口點開始,沿著物件啟用的序列的任何位置 應用程式域有助於將在乙個應用程式中建立的物件與在其他應用程式中建立的物件隔離,以使執行時行為可以預知。在乙個單獨的程序中可以存在多個應用程式域。以前使用程序邊界來隔離在同一臺計算...
應用程式域
一種邊界,它由公共語言執行庫圍繞同一應用程式範圍內建立的物件建立 即,從應用程式入口點開始,沿著物件啟用的序列的任何位置 應用程式域有助於將在乙個應用程式中建立的物件與在其他應用程式中建立的物件隔離,以使執行時行為可以預知。在乙個單獨的程序中可以存在多個應用程式域。以前使用程序邊界來隔離在同一臺計算...
應用程式域
應用程式域通常由執行庫宿主以程式設計的方式來建立和操作。但是,有時應用程式還可能要和應用程式域結合起來使用。例如,應用程式可以將乙個應用程式元件解除安裝到乙個域中,以避免停止整個應用程式。是應用程式域的程式設計介面。此類包括各種方法,這些方法可以建立和解除安裝域 建立域中各型別的例項以及解除安裝域。...