mehmetduran.com - Paylaşmak Güzeldir...
Web.config Dosyası Üzerinde İşlemler (Module Ekleme, Çıkarma)
Bu yazımda daha önce paylaştığım 'HttpModule Kullanımı' yazısında eksik olan module'ün programatik olarak aktif veya pasif edilmesini göstermeye çalışacağım. Aslında yapacağımız iş xml bir dosya olan web.config dosyasına node eklemek ve silmek yani xml parsing yapacağız. Örnek olarak module ekleme ve çıkarma işlemini yapan kodları paylaşacağım. Ancak bu kodları uyarlayarak web.config üzerinde tüm işlemleri yapabiliriz. Web.config üzerinde tuttuğumuz veya tutmamız gereken verileri bu şekilde ekleme çıkarma yaparak dinamik bir sistem olarak hazırlayabiliriz. Örnek olarak module ekleme ve çıkarma kodlarına bakalım.

Öncelikle işlem yapacağımız Xml belgenin yapısını iyi bilmeliyiz. Web.config dosyasında tüm node'lar configuration node'u altında yer alır. Node bilgilerini iyi bilmeliyiz ki xml belge üzerindeki verileri kullanalım ve işlemler gerçekleştirelim.

Yazdığımız HttpModule'ün çalışması için web.config dosyamızda tanımlı olması gerekir. Tam tersi; çalışan bir module'ü devre dışı bırakmak istersek web.config dosyamızdaki tanımı kaldırmalıyız. Bu işlemi el ile yapmak çok zahmetli ve akıllıca olmaz. Bu işlemi sistematik olarak yapmak için aşağıdaki gibi bir kod kullanabiliriz.

 
   XmlDocument xmlDokumani = new XmlDocument();
   xmlDokumani.Load(HttpContext.Current.Server.MapPath("~/web.config"));
   XmlNodeList moduller = xmlDokumani.SelectNodes("/configuration/system.web/httpModules/add[@name=\"AcKapaModule\"]");
   if (moduller.Count == 0) // Eğer module kullanılır durumda değilse yani pasif ise.
   {
     XmlNode dugum = xmlDokumani.SelectSingleNode("/configuration/system.web/httpModules");
     dugum.InnerXml = dugum.InnerXml + "<add name=\"AcKapaModule\" type=\"mvc_mehmet.Models.AcKapaModule\"/>";
     xmlDokumani.Save(HttpContext.Current.Server.MapPath("~/web.config"));
   }
   else if (moduller.Count == 1) // Eğer module kullanılır durumda yani aktif ise.
   {
     string sonuc = "";
     XmlNodeList Ymoduller = xmlDokumani.SelectNodes("/configuration/system.web/httpModules/add");
     foreach (XmlNode node in Ymoduller)
     {
       if (node.Attributes["name"].Value != moduller.Item(0).Attributes["name"].Value)
       {// Sileceğimiz module dışındakileri tekrar xml formatta belirliyoruz.
         sonuc += "<" + node.Name + " name=\"" + node.Attributes["name"].Value + "\" type=\"" + node.Attributes["type"].Value + "\" />";
       }
     }
     XmlNode Ymodul = xmlDokumani.SelectSingleNode("/configuration/system.web/httpModules");
     Ymodul.InnerXml = sonuc; // Silmek istenilen modülü sildik ve geriye kalan modulleri tekrar kaydediyoruz.
     xmlDokumani.Save(HttpContext.Current.Server.MapPath("~/web.config"));
     // Sonuçta çalıştırmak istemediğimiz module'ü silmiş oluyoruz.
   }
 

Yazdığımız HttpModule'ü bu şekilde aktif veya pasif yapabiliyoruz. Aynı şekilde web.config üzerinde tanımlanması gereken tüm verileri bu şekilde programatik olarak düzenleyebiliriz. Bu bizlere yaptığımız işlerin dinamik olmasını ve yönetiminin kolaylaşmasını sağlar. Örneğin veritabanı bağlantı cümleleri genelde web.config dosyasında tanımlanır. Bu şekilde bir yöntem ile bağlantı cümlesini arayüz ile kolaylıkla düzenleyebiliriz. Diğer bir örnek ise asp.net projelerinde üyelik ve role bilgileri, kısıtlamalar web.config üzerinde tanımlanır. Bu yöntem ile bu bilgileri de düzeneleyebilir ve yönetebiliriz.

Ayrıca Xml veri üzerinde sorgulama yapmak için node seçimi yaparken kullanılan yöntemleri iyi bilmemiz gerekiyor. Son olarak da server üzerinde bu tip ekleme, çıkarma, yazma işlemleri yaptığımız belgelere yazma izni vermeliyiz. Aksi halde hata alırız.

İyi Çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar C Sharp'ta Kendi Tarih Formatımızı Belirlemek Kullandığım Email Sınıfı (Çoklu Mail ve Dosya Gönderimi) Jquery ve Ajax ile Kullanıcı Kontrollerini Kullanma - 1 Bloğumda Kullandığım SiteMap Sınıfı Asp.net'te Veritabanı Bağlantı Cümlesini Web.Config'de Tanımlama
Yorumlar
Yorum Yaz
RSS Yorum Takibi
sinan özkan 19 Ekim Pazartesi 2009 22:43 #1
emeğine sağlık mehmet güzel anlatmışsın.
alisade 10 Aralık Perşembe 2009 14:45 #2
Kardeş ellerine sağlık.Emek verip bi sürü yazı yazmışsın millet faydalansın diye.Hepside faydalı bilgiler yazılımcılar için. genç yaşına büyük işler sığdırmıssın..
serkan topkan 30 Nisan Cuma 2010 14:43 #3
Sizden rica etsek , bu uygulamayı, httpmodule altındaki moduulleri listeleyip, listeden seçileni aktif et,pasif et şeklinde örnek yapabilirmisiniz. Listview olur mesela. Önce modllüler listelensin. Tıkladığımızda aktif pasif olduğu yazssın.
serkan topkan 30 Nisan Cuma 2010 15:38 #4
Ben şöyle bişey düşündüm, bir listview'e diizndeki tüm .cs uzantılı dosyaları okuyup, içlerinde "IHttpModule" deeri geçenleri doldurup. Seçilenin pasif yada aktif olduğunu okumak. Çokmu saçma oldu. Çünkü web.config den çıkarılan modül eklenmek istendiğinde ismini hatırlamak lazım.
Mehmet Duran 30 Nisan Cuma 2010 22:59 #5
Örnek yapıp paylaşma konusunda pek zamanımın olmadığını söyleyeyim. Söylediğini kendin yaparsan kendi gelişimin için daha iyi olur. Bunu yapmak için söylediğin yöntem olabilir ama o kadar detaya gerek yok. Sonuçta modülleri kendin oluşturuyorsan ve bu modullerin aktif olması için veritabanında değer tutabilir veya web.config'de modüllerin tanımladığı alanı xml dosyası okuma yöntemi ile veya web.config okuma yöntemi ile okuyabilir ve değerleri alabilirsin. Aldığın değerlere göre işlem yapıp modülleri aktif veya pasif edersin.
bulent 18 Haziran Cuma 2010 16:13 #6
merhaba; ekledigimiz alanda farklı alanlar varsa nasıl bir döngü kurmamız gerekiyor kaldırmamız için. add name=AcKapaModule type=MehmetDuran.AcKapaModule bu şekilde değilde.. remove name=ScriptHandlerFactory
bulent 18 Haziran Cuma 2010 16:22 #7
XmlNode xnsil = xmlDokumani.SelectSingleNode("/configuration/system.webServer/handlers/add[@name=\"Logoyukle\"]"); xnsil.ParentNode.RemoveChild(xnsil); şeklinde sildim.
Mehmet Duran 18 Haziran Cuma 2010 16:49 #8
Merhaba. Yazımdaki kodlarda zaten farklı moduller varsa ona göre kontrol yaptım. Kodların açıklamalarını da yapmaya çalıştım. Belirttiğin yöntem ile de mantık aynı.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Gençken bilgi ağacını dikmesek, yaşlandığımız zaman gölgesine sığınacak bir yerimiz olmayacaktır.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009