Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.
Application domain jest mechanizmem podobnym do procesu w systemie operacyjnym. Wykorzystywana jest do rozdzielenia uruchomionych aplikacji jedna od drugiej, tak, aby nie wpływały na siebie wzajemnie. Zastosowanie tej techniki pozwala wywoływać zewnętrzne obiekty assemblies zapewniając wydajność i warstwę bezpieczeństwa. W każdej chwili można zamknąć domenę aplikacji i zwolnić zajmowane zasoby. Dodatkowo można ograniczyć przywileje tak uruchomionej aplikacji, minimalizując ryzyko tego, że wykrycie podatności na ataki w zewnętrznej assembly zagrozi naszej aplikacji.
Podstawowy przykład
Aby pokazać zasadę działania utwórzmy nową solucję w Visual Studio, do której dodajmy dwa projekty. Pierwszy projekt typu Console Application i nazwie ReadFile. Będzie on wyświetlał zawartość jednego z plików systemowych.
Dodajemy dyrektywę ładującą bibliotekę:
Kod do wstawienia w metodzie Main:
1: Console.WriteLine("ReadFile ==");
2: using (StreamReader reader = new StreamReader(@"C:\Windows\win.ini"))
3: {
4: Console.WriteLine(reader.ReadToEnd());
5: }
6: Console.WriteLine("== ReadFile");
Drugi projekt – AppDomainDemo, tworzymy także jako aplikację konsolową. Następnie dodajemy w nim referencję do poprzedniego projektu (opcja Add Reference…).
Kod do wpisania w metodzie Main:
1: // Wypisz przyjazną nazwę naszej assembly
2: Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
3:
4: // 1. Utwórz domenę
5: AppDomain d = AppDomain.CreateDomain("NewDomain");
6: Console.WriteLine("Child domain: " + d.FriendlyName);
7:
8: // 2. Załadowanie i uruchomienie obiektów assemblies
9: d.ExecuteAssemblyByName("ReadFile");
10:
11: // 3. Zamknij domenę aplikacji
12: AppDomain.Unload(d);
13:
14: Console.ReadKey();
- Tworzymy domenę aplikacji poprzez wywołanie jednej z wersji metody (przeciążanie metody) AppDomain.CreateDomain – w tej wersji podajemy jedynie nazwę nowej domeny,
- Wywołujemy metodę ExecuteAssemblyByName – uruchamiamy kod po nazwie, jeśli chcielibyśmy wykonać go wskazując ścieżkę należałoby wykorzystać metodę ExecuteAssembly,
- Statyczna metoda AppDomain.Unload pozwala nam odładować domenę i wszystkie znajdujące się w niej assemblies. Możemy to zrobić w każdej chwili.
W tym wpisie przedstawione zostały jedynie podstawy pracy z domenami. W lekcji nr 2 temat ten zostanie przedstawiony bardziej szczegółowo.
Odnośniki
Kolejny artykuł z serii to 70-536:Configuring Application Domains