Sem Göksu
Sem Göksu
Yazılım · Yolculuk · Fenerbahçe
ASP.NET

System.DirectoryServices Sınıfı ile IIS’e Hükmedelim

Merhaba arkadaşlar bu makalemiz de System.DirectoryServices sınıfını kullanarak IIS’de var olan bir site üzerinde virtual directory oluşturacağız.

10 Mart 2008 4 dk okuma 1469 1
Merhaba arkadaşlar bu makalemiz de System.DirectoryServices sınıfını kullanarak IIS’de var olan bir site üzerinde virtual directory oluşturacağız.

Eger bir servis saglayıcı isek iis üzerinde çok fazla degisiklik yapmak zorunda kalırız. Bazı durumlar da müsteriler virtual directory olusturma ihtiyacı duyabiliyor. Bunun için sürekli servis saglayıcı ile irtibat halinde olmaması ve is yükü çıkarmaması için kullanıcılara bir arayüz ile kendi virtual directory'lerini kendilerinin olusturmalarını saglayabiliriz. Iste bunun için .net framework bize System.DirectoryServices namespace'ni sunuyor.

System.DirectoryServices

System.DirectoryServices(SDS), active directory gibi dizinlere programatik olarak erismeyi saglayan .net framework kütüphanesidir. Örnegin iis üzerinde açtıgımız bir web sitesi yada virtual directory'yi bu namespace ile programatik olarak kolayca yapabiliriz.

Sınıfımız ile ön bilgiyi aldıktan sonra konu ile ilgili bir örnek yapalım. Ilk olarak iis üzerinde bir site açıp daha sonra da bu site üzerinde virtual directory açacagız.

Örnek

Örnegimiz için yeni bir web site olusturalım. Daha sonra projemize semDirectoryServices.cs isimli yeni bir class ekleyelim. Bu class asagıdaki gibi olacaktır. Class'a geçmeden önce iis'i yapılandırmamızı saglayan iis metabase dosyasını inceleyelim.

IIS Metabase Dosyası

Metatabanı, birçok IIS (Internet Information Services) yapılandırma degeri için depodur. Metatabanı düz metinli bir .XML dosyasıdır ve el ile veya programla düzenlenebilir. Ayrıca metatabanı çok verimli sekilde genisletilebilir. IIS dagıtımınız büyüdükçe metatabanınız da büyür; bununla birlikte bir devralma modeli kullanarak, yinelenen degerlerin açıkça bildirimi engellenerek, yapılandırma degerlerinin metatabanından okunması gerektiginde olusan is yükü azaltılır.

semDirectoryServices.cs

usingSystem;
usingSystem.DirectoryServices;

publicclass semDirectoryServices
{
    private string metabase = "IIS://Localhost/W3SVC"; //Kullanacagımız Metabase dosyası
    private string siteYolu; // Sitemizin bulunacagı yol
    private string siteID; // IIS Üzerinde sitemizin alacagı benzersiz ID
    private string siteAdi; // IIS üzerinde sitemize erisecegimiz isim
 
    public string SiteID
    {
        get { return siteID; } set { siteID = value; }
    } 

    public string SiteAdi
    {
        get { return siteAdi; }set { siteAdi = value; }
    }

 

    public string SiteYolu
    {
        get { return siteYolu; } set { siteYolu = value; }
    }

 

    public string SiteOlustur()// Bu fonksiyon ile IIS üzerinde bir site açacagız.
    {  
        try
        {
            DirectoryEntry Servis = new DirectoryEntry(metabase);
            string className = Servis.SchemaClassName.ToString();
            DirectoryEntries Siteler = Servis.Children;
            DirectoryEntry YeniSite = Siteler.Add(siteID, (className.Replace("Service", "Server")));
            YeniSite.Properties["ServerComment"][0] = siteAdi;//Açılacak sitenin adı.
            YeniSite.CommitChanges();

            DirectoryEntry YeniDizin;
            YeniDizin = YeniSite.Children.Add("Root", "IIsWebVirtualDir");//Root Dizine Yeni bir site ekliyoruz
            YeniDizin.Properties["Path"][0] = siteYolu; // Host edilecek sitenin yolunu belirliyoruz. 
            YeniDizin.Properties["AccessScript"][0] = true;
            YeniDizin.CommitChanges();
            DirectoryEntry path = new DirectoryEntry(metabase + "/" + siteID);

            PropertyValueCollection propValues = path.Properties["ServerBindings"]; 
            path.Properties["ServerBindings"].Value = ":8080:"; // Sitenin çalısacagı baslantı noktasını belirliyoruz.
            path.CommitChanges();
            return "Web Sitesi Basarıyla Olusturuldu !"; 

        }

        catch (Exception Ex)
        {
            return "Bir Hata Meydana Geldi :" + Ex.Message;
        }
    } 
   

Class ile isimiz simdilik bu kadar. Simdi kullanıcı ara yüzüne geçebiliriz. Formumuz üzerine;

5 adet label,

3 Textbox ve

1 Button ekleyelim.

Benim hazırladıgım görüntü yukarıdaki gibidir. Simdi buton üzerine tıklayıp sitemizi olusturacak kodları yazalım.

Button Click Eventi

    protected void btnSiteOlustur_Click(object sender, EventArgs e)
    {
        semDirectoryServices sds = new semDirectoryServices();
        sds.SiteID = txtSiteID.Text;
        sds.SiteAdi = txtSiteAdi.Text;
        sds.SiteYolu = txtDosyaYolu.Text;
        lblUyari.Text =  sds.SiteOlustur();
    }

 

Simdi yazdıgımız kodu test edelim.

Evet, uyarı olarak basarıyla olusturuldu dedi ama emin olmak için ilk olarak iis'e gidip bakalım gerçekten de eklendi mi?

IIS'de eklenmis JSimdi yazgelistir.com sitesi üzerinde sag tıklayarak göz at seçenegine tıklayalım.

Gerçekten de çalısıyormus J

Simdi bu siteye birde virtual directory ekleyelim. Bunun için Classs'ızın içine asagıdaki kodları ekleyelim.

semDirectoryServices.cs - Ek

publicstring VirtualDirectoryOlustur()
    { 
        try
        {
            string vdMetabase = metabase + "/" + siteID + "/root";
            DirectoryEntry site = new DirectoryEntry(vdMetabase);
            string className = site.SchemaClassName.ToString();
            if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir")))
            {
                DirectoryEntries vdirs = site.Children;
                DirectoryEntry YeniVirtualDirectory = vdirs.Add(siteAdi, (className.Replace("Service", "VirtualDir"))); //Sitemize virtual directory ekliyoruz
                YeniVirtualDirectory.Properties["Path"][0] = siteYolu; // Virtual directorynin host edilecegi dosya yolu
                YeniVirtualDirectory.Properties["AccessScript"][0] = true;
                YeniVirtualDirectory.Properties["AppFriendlyName"][0] = siteAdi; // Virtual directory adı
                YeniVirtualDirectory.Properties["AppIsolated"][0] = "1";
                YeniVirtualDirectory.Properties["AppRoot"][0] = "/LM" + vdMetabase.Substring(vdMetabase.IndexOf("/", ("IIS://".Length)));
                YeniVirtualDirectory.CommitChanges();
            }
            return "Virtual directory Basarıyla Olusturuldu !";
        }

        catch  
        {
            return "Bir Hata Meydana Geldi !";
        }
    }

Olusturdugumuz forma bir adet daha Button ekleyelim. Bu buton altında da daha önce olusturdugumuz siteye yeni bir virtual directory ekleyecegiz.

vdOlustur Butonu Click Eventi

    protected void vdOlustur_Click(object sender, EventArgs e)
    {
        semDirectoryServices sds = new semDirectoryServices();
        sds.SiteID = txtSiteID.Text;
        sds.SiteAdi = txtSiteAdi.Text;
        sds.SiteYolu = txtDosyaYolu.Text
        lblUyari.Text = sds.VirtualDirectoryOlustur();
    }

 Hemen test edelim J

Evet olusturuldu dedi ama birde iis'den bakalım.

Iste budur J

Bu makalenin de sonuna geldik. Bir sonraki makale de görüsmek üzere. Iyi çalısmalar dilerim

Sem Göksu
MCP | MCAD.NET |MCTS

sem.goksu@yazilimgunlugu.com
www.semgoksu.com | www.yazilimgunlugu.com

Kaynaklar

http://msdn.com

Etiketler: #ASP.NET #ASP.NET 2.0
Paylaş:

Yorumlar (1)

G
Gül Mira 09 Eki 2009 16:20

Super makale, teşşekkürler! Uzun bir google'amada sonuç bulamayıp umutsuzluğa kapıldığım anda çok iyi geldi! Arada sırada "Türkçe Sayfalar" a seçeneğine bakmayı herkese tavsiye ederim:) İyi kodlamalar!

Yorum bırak

* Yorumlar moderasyon sonrası yayınlanır. E-posta gizli tutulur.