10 Mar 2008 System.DirectoryServices Sınıfı ile IIS’e Hükmedelim Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0 2 Yorum 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.DirectoryServicesSystem.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 JEvet olusturuldu dedi ama birde iis'den bakalım.Iste budur JBu makalenin de sonuna geldik. Bir sonraki makale de görüsmek üzere. Iyi çalısmalar dilerimSem GöksuMCP | MCAD.NET |MCTSsem.goksu@yazilimgunlugu.com www.semgoksu.com | www.yazilimgunlugu.com Kaynaklarhttp://msdn.com Yorum (2) Gül Mira / 9.10.2009 16:20:43 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 Yaz * Ad Soyad: * Email: * Message:
Yorum (2) Gül Mira / 9.10.2009 16:20:43 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!
Gül Mira / 9.10.2009 16:20:43 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!