Makale Özeti

Bu makalede uygulama etki alanının desteklediği metodları ve bazı özelliklerine değindikten sonra bir örnek yapacağız.

Makale

Uygulama Etki Alanı-2

AppDomain SINIFI

Bu makalede uygulama etki alanının desteklediği metodları ve bazı özelliklerine değindikten sonra bir örnek yapacağız.

Default domain, yönetilmeyen kodun yüklenmesi sırasında, CLR host arayüzünün çağırılmasıyla otomatik olarak oluşturulur. Yönetilmeyen kodu kullanarak, System_AppDomain arayüzü ile System.AppDomain sınıfına erişiriz. System.AppDomain sınıfı ile yönetilen kodların üzerinde işlemler yapabiliriz.

Uygulama etki alanları AppDomain sınıfı kullanılarak oluşturulabilir. Oluşturulan uygulama etki alanının özelliklerini istediğimiz şekilde yine AppDomain sınıfını kullanarak ayarlanabilir.

Uygulama Etki Alanının Oluşturulması

Uygulama etki alanı System.AppDomain sınıfının CreateDomain metodu ile oluşturulur. CreateDomain metodunun overload seçenekleri vardır. Bunlar;

1. Overloads Public Shared Function CreateDomain(String) As AppDomain

İsmini vererek AppDomain oluşturma.

2. Overloads Public Shared Function CreateDomain(String, Evidence) As AppDomain

System.Security.Evidence nesnesi uygulama için CreateDomainin güvenlik ayarlarını tanımlamamızı sağlar.

3. Overloads Public Shared Function CreateDomain(String, Evidence, AppDomainSetup) As AppDomain

Güvenlik ayarlarına ek olarak uygulama etki alanı içinde CreateDomain için assembly ayarlarının yapılmasını sağlar.

4. Overloads Public Shared Function CreateDomain(String, Evidence, String, String, Boolean) As AppDomain

Güvenlik ve assembly ayarlarının yanında, özel yapılandırma ayarlarının yapılmasını sağlar

Uygulama Etki Alanının Güvenlik Ayarları (Evidence)

Yönetilen kod CLR içine yüklenir. CLR, koda ulaşım sırasında güvenliği sağlar. Koda ulaşım güvenliğini nasıl sağladığına baktığımızda evidende terimi ile karşılaşıyoruz. Evidencenin çalışma mantığında yatan temel; çalıştırılacak kod hakkında soru sormaktır. Çalıştırılmak istenen kod hangi bölgeden geliyor, tam ismi nedir gibi çeşitli sorular sorarak kod hakkında bilgi toplar. İşte toplanan bu bilgiler evindenceyi oluşturuyor. Toplanan bilgiler ile kodun yüklenip yüklenmeyeceği veya çalıştırılması sırasında ne tür haklara sahip olup olmayacağını belirlenerek ayarlanıyor. Toplanan bilgilere göre güvenlik sağlanır. Bu bilgilerin akabinde güvenlik politikası oluşturuluyor. Güvenlik politikası her koda ayrı ayrı özel hazırlanır.

Assembly Ayarları

Assemblyyi uygulama etki alanı içinde kontrol edebilmek için AppDomainSetup sınıfını kullanırız. AppDomainSetup sınıfının birçok özelliğinin yanında, ApplicationBase ve ConfigurationFile olmak üzere iki önemli özelliği vardır.

Yeni oluşturulan bir uygulama alanı, oluşturanın ApplicationBase özelliğini miras alır. ApplicationBase özelliği uygulamamız için kök klasör özelliğindedir.

ConfigurationFile özelliği, XML dosyaları tanımlar. Bu dosyalar uygulama etki alanı içinde çalıştırılacak olan uygulama için yapılandırma ayarlarını içerir. Yapılandırma dosyalarında, uyarlama kuralları gibi uygulamaya ait çeşitli bilgiler tanımlanır.

Uzaktaki Uygulama Etki Alanında Çalışma

Uzaktaki uygulama etki alanının assemblyyi çalıştırmak için ilk olarak System.AppDomain.CreateDomain ile uzakta uygulama etki alanı oluşturulur. ApplicationBase özelliği ve Evidence özelliği kullanılabilir. Ve isteğe göre ApplicationBase gibi yapılandırma bilgileri assemblynin yüklendiği yerde aranır. Ve yine istenirse Evidence ile güvenlik uygulaması yapılır. System.AppDomain.ExecuteAssembly ile uygulama etki alanında oluşturulan assembly kullanılır. Bu metodun üç kullanım şekli vardır. Şöyle ki :

1. Overloads Function ExecuteAssembly(String, Evidence, String()) As Integer

ExecuteAssemblynin en genel halidir. İlk aldığı parametre çalıştırılacak olan Assemblynin adresidir. İkinci parametre assembly güvenliği için Evidence desteğinin çağırılmasını sağlar. Son parametre assemblynin temel giriş noktasının değerini gönderir.

2. Overloads Function ExecuteAssembly(String, Evidence) As Integer

3. Overloads Function ExecuteAssembly(String) As Integer

System.AppDomain.CreateInstanceyi ile uzaktaki uygulama etki alani içinden herhangi bir metod çağırılabilir. CreateInstance, nesnenin referansını dönderir. Çağırılan nesne System.MarshalByRefObjectden türetilmiş olmalıdır. Bu sayede, oluşturulan uygulama etki alanı sınırları içinde karşı tarafa referans gönderilmiş olur.

Load-Unload

Uygulama etki alanında assemblynin yüklenmesi için System.AppDomain.Load() metodu kullanılır.

Uygulama etki alanının geri yüklenmesi için System.AppDomain.Unload() metodu kullanılır. Uygulama etki alanı geri yüklenmesi sırasında, uygulama etki alanına herhangi bir threadin girişine izin verilmez. Uygulama etki alanına ait bütün özel bilgiler serbest bırakılır.

Şimdi uygulama etki alanına ait bir örnek yapalım. Bir konsol uygulaması ile uygulama etki alanı oluşturalım. Sonra da oluşturduğumuz etki alanına ait bazı bilgileri konsola yazdıralım.

Imports System

Imports System.Reflection

Imports System.Security.Policy evidence için import ediliyor

Class ApplicationDomain  

    Public Shared Sub Main()

        uygulama etki alanı yükleme ayarları yapılıyor

        Dim DomainBilgisi As New AppDomainSetup

        DomainBilgisi.ApplicationBase = "file:///" + System.Environment.CurrentDirectory

        yeni oluşturulan etki alanı için evidence oluşturuluyor.

        Dim KodBilgisi As Evidence = AppDomain.CurrentDomain.Evidence

        yükleme bilgileri kullanılarak yeni bir uygulama etki alanı oluşturuluyor.

        Dim OlusturulanDomain As AppDomain = AppDomain.CreateDomain("BuBenimIlkDomainim", KodBilgisi, DomainBilgisi)

        uygulama etki alanı hakkındaki bilgiler konsol ekranına yazdırılıyor.

        Console.WriteLine(("Host domain : " + AppDomain.CurrentDomain.FriendlyName))

        Console.WriteLine(("Yeni oluşturulan domain ismi: " + OlusturulanDomain.FriendlyName))

        Console.WriteLine()

        Console.WriteLine(("Application base : " + OlusturulanDomain.SetupInformation.ApplicationBase))

         AppDomain.Unload(OlusturulanDomain)

        uygulama etki alanı geri yükleniyor

        Console.ReadLine()

    End Sub

End Class

Ekran çıktısı aşağıdaki gibidir.

Şimdi kodu bir gözden geçirelim. Yükleme ayarlarını yaptıktan sonra kod bilgisi elde etmek için delil topluyoruz. AppDomain sınıfına ait CreateDomain() fonksiyonu kullanılarak bir tane uygulama alanı oluşturuyoruz. Daha sonradan Host domainin ismi, oluşturduğumuz etki alanının ismi ve ApplicationBase isimli özelliğin içerdiği değerleri konsol ekranına yazdırıyoruz.

 

Kaynak:
msdn.microsoft.com
www.gotdotnet.com

 

Öznur KARAKUŞOĞLU
oznurkarakusoglu@hotmail.com