Makale Özeti

Exception Management Application Block’un ana sınıflarını inceliyor ve örnek yapıyoruz....

Makale

EXCEPTION MANAGEMENT APPLICATION BLOCK – 2

Exception Management Application Block’un ana sınıflarını inceyelim.



BaseApplicationException sınıfı. Bu sınıf, uygulamanızın tüm tanımlanmış hata sınıfları için taban sınıf olarak kullanılabilir. Tüm hataların genel durumunun seviyesini minimum seviyede olmasını garantiye alır.
ExceptionManagerSectionHandler sınıfı. Bu sınıf, Microsoft .NET-tabanlı XML konfigürasyon dosyasının okunmasından sorumludur. Exception Management Application Block ‘un kullandığı XML konfigürasyon dosyasının herbir parçasında çeşitli konfigürasyonlar yapabiliriz.
ExceptionManager sınıfı. Hata paylaşım bilgilerinin işlem yönetiminde kullanılır. Birincil amacı varsayılan yayınlayıcı sınıfının yayınlarını içermesini ister ve tüm tanımlanmış kişisel yayınlayıcı sınıfları istediğiniz ortamda kütükleyebilirsiniz. Örneğin email ile gönderebilirsiniz.
ExceptionManagerInstaller sınıfı. Bu kurulum sınıfı, kurulum zamanında varsayılan yayınlayıcının ihtiyacı olan olay kaynağını oluşturur(veya kişisel yayınlayıcı ile), bunu da hata detaylarını Windows Event Log’a yazmak için gerçekleştirir. Olay kaynakları çalışma zamanında değil kurulum zamanında oluşturulur.
DefaultPublisher sınıfı. Bu sınıf temel yayınlayıcı fonksiyonelliği sağlar. This class provides basic publisher functionality, ve kişisel yayıncıların bulunmadığı ortamda hataltın detaylarını yayınlamak için ExceptionManager sınıfı kullanılır. Microsoft Windows Event Log’a hata detaylarını log’lar.
IExceptionPublisher ve IExceptionXmlPublisher arayüzleri. Yayınlayıcı sınıflar bu arayüzlerden implemente edilir.

BaseApplicationException Sınıfının Sağladığı Bilgiler
• Hatanın oluştuğu bilgisayarın adı,
• Hatanın meydana geldiği andaki tarih ve saat,
• Uygulamanın host edildiği uygulama domain adı,
• Hatanın oluştuğu yerdeki thread tanımı,
• Ek kişisel bilgileriniz.

Gibi bilgileri alabilir, istediğinizi işinize gore kullanabilirsiniz.

ExceptionManagerSectionHandler Sınıfı: ExceptionManagerSectionHandler sınıfı, Exception Management Application Block’un ayarlarının tanımlandığı, konfigürasyon dosyasındaki detayları elementinden okumak ile sorumludur.
ExceptionManager sınıfı: Bu sınıf Exception Manager’ın en önemli sınıfıdır. Oluşan hataları yayınlamak ile görevli bir sınıfdır. Bu sınıf, herhangi bir .NET Framework-tabanlı Windows programı veya ASP.NET uygulamasında kullanılabilir. Yani uygulamanın tipine gore çalışması değişkenlik göstermez.

Exception Management Application Block, varsayılan olarak oluşan hataları Windows Event Log’da yayınlar. Yani varsayılan yayınlayıcısı Windows Event Log’dur. Burada yayınlamasıda tercih edilebilir bir yöntemdir. Özellikle sunuculardan sorumlu kişilerin sürekli kontrol yaptıkları ortamda gerçektende anlık çözümler verilebilen bir sistem olabilir. Bunun dışında da kullanabilirsiniz tabikide.
Ancak kendi system yapınıza uygun özel yayınlayıcılarıda kullanabilirsiniz. Veya birden fazla yayınlayıcı kullanmak isteyebilirsiniz.
Bir senaryo düşünelim, sisteminizde hata durumlarını seviyelendiriyorsunuz. 1 – 5 arası her hatanın bir önem derecesi olduğunu düşünün. Aslında uygulamalarda da bu şekilde olmalıdır. Oluşan hatalar bir yerlerde saklandıkdan sonra genellikle kriz anlarında veya bir problem olduğunda inceleniyor. Sonra da bir bakıyoruzki bu bilgiler çoğalmış, bilgileri getirirken bile yavaşlık oluyor. Bu kocaman deniz içinde bilgi aramanız zorlaşıyor. Yazılım projelerinin canlı kullanımlarında verimliliği arttırmak için oluşan hataların periyodik olarak mutlaka kontrol edilmesi gerekmektedir. Bunun sonucunda sürekli oluşan hatalaları, kullanıcıların çoğunlukla yaptıkları yanlışları, uygulamanın hangi zamanlarda yavaşladığını gibi çoğaltabileceğimiz örnekler gibi sorunları tespit edip, bunun sonucunda önlem alabiliriz. Örnekleri çoğaltalım, uygulamamızda bir arama ekranı olsun. Bu ekranda kullanıcılar sürekli üç harfden daha az ifade girip arama yapmak istiyorlar. Ve sizde bu mesajı sürekli kullanıcıya dönüyorsunuz. Demekki uygulamanızın arama bölümünde üç harfden daha az ifade girilemeyeceğine dair bir mesaj vermelisiniz. (Bu uyarı mesajını kullanıcıya Exception Management Application Block ile verebileceğiniz gibi, mesajın saklanmasını da aynı şekilde blok aracılığı ile yapabilirsiniz.) Tabiki bu takip aşamasında da belli bir kaynağın bu iş ile ilgilenmesi gerekir. Yazılımların en önemli görevlerinden bir taneside kaynakları verimli kullanmak ise burda da bazı şeyleri önceden düşünmemiz gerekir. Bunu engellemek için bu hataları derecelendirin. Örneğin 1 derecesindeki hatayı olabilecek en büyük problem olarak kabul edin. SQL Server ile bağlantının kopması, uygulamanın hafıza hatası verip kapanması, web uygulaması ise IIS’in timeout’a düşmesi gibi olasılıkları kontrol ettiğinizde, saklanması aşamasında 1 seviyesi ile derecelendirin. Sonra sisteminizdeki önemlerine göre sakladığınız hataları ilgili seviyelerde tutun. Böylelikle seviyelerine göre sisteminizde oluşan hataları kolaylıkla analiz edebilirsiniz. Bunun yanı sıra, 1 numara seviyesindeki hatalarınız çok önemli olacağı için, bu seviyedeki hataları daha kolay görebileceğiniz şekilde yayınlayabilir, diğerlerinide yine önem derecelerine gore yayınlayabilirsiniz. Örneğin 1 seviyesindeki hatayı SMS olarak gönderebilir, 2 seviyesindeki hatayı e-posta ile gönderebilir, 3 seviyesindeki hatayı bir dosyaya yazabilirsiniz. Hatta isterseniz hata oluştuğu zaman Windows Management Instrumentation (WMI)’ı tetikleyebilirsiniz.
Görüldüğü gibi, hataların yayınlanacağı ortamların seçilmesinde özgürüz. Ve istediğimiz kadar yayınlayıcı tanımlayabiliriz.
Exception Management Application Block’da, bu şekilde özel hata yayınlayıcılarınızı tanımlayabilmeniz için,
Microsoft.ApplicationBlocks.ExceptionManagement.Interfaces.dll’inden tanımlanmış IExceptionPublisher veya IExceptionXmlPublisher arayüzlerinden birinden implemente edilmelidir.
Bu özel hata yayıncılarınızda, hata detaylarının XML formatında olmasını istiyorsanız, IExceptionXmlPublisher’dan arayüzünden implemente edilmelidir. Eğer normal formatta almak isterseniz IExceptionPublisher arayüzünden implemente edilmelidir. Her bir arayüz Publish isimli bir tekil metot içerir, bu metot ile hata detaylarını diğer opsiyonel konfigürasyon ayarlarını ve kişisel özellikleriniz ile alabilirsiniz.
Exception Management Application Block’u kullanabilmek için, Visual Studio .NET ortamındaki projenize Referance olarak vermeniz gerekir. Bunun için varsayılan kurulumlarda ve DLL dosyası;
C:\Program Files\Microsoft Application Blocks for .NET\Exception Management\Code\CS\Microsoft.ApplicationBlocks.ExceptionManagement\bin\Debug\ Microsoft.ApplicationBlocks.ExceptionManagement.dll
Altında bulunur.
Eğer dönen bilgileri XML formatında almak istersek, System.Runtime.Serialization sınıfını tanımlamamız gerekmektedir.
Eğer kişisel yayınlayıcınız yok ise, hataların Event Log’da yayınlanması için yapmanız gereken sadece yakanan hatanın veya mesajın ExceptionManager’ın Publish sınıfına parametre olarak göndermek olacaktır.
ExceptionManager.Publish(ex)
Buradaki ex ifadesi yakalanan hatayı temsil etmektedir.
Sonrasında Event Log’u açtığınız zaman hatanın burada yayınlandığını göreceksiniz.
Exception Management Application Block kontrollerini konfigürasyon dosyasından sağlar. Uygulama konfigürasyon dosyaları XML dökümanlarıdır ve uygulamanın bulunduğu yolun kök dizininde durur. ASP.NET-tabanlı uygulamalar durumunda, uygulama konfigrasyon dosyasının adı Web.config’dir. Diğer uygulamalar için,uygulama konfigürasyon dosyasının adı: uygulama_adı.uygulama_uzantısı.config; örneğin, adı MyApp.exe olan bir uygulamanın konfigürasyon dosyası adı: MyApp.exe.config olacaktır.
Bunu yapabilmemiz için Exception Management Block’un konfigürasyonlarını yapmamız gerekmektedir.
Bu tanımları app.config dosyasında yapabileceğimiz gibi, Machine.config dosyasında da yapabiliriz. Böylelikle bilgisayar üzerindeki tüm uygulamalarda bu ayarları uygulayabiliriz. Eğer app.config dosyasında tanımlarınızı yaparsanız, sadece kullandığınız uygulama bazında bu tanımlar geçerli olur. Machine.config dosyasında yaparsanız, ilgili makine üzerindeki tüm uygulamalarda bu tanımlar geçerli olur.
Özel yayınlayıcınızı oluşturmak için bir örnek verelim. Öncelikle yeni bir sınıf oluşturun. Bu sınıf için referanslarımız;
using Microsoft.ApplicationBlocks.ExceptionManagement;
using System.Collections;
using System.Collections.Specialized;
using System.Text;

olabilir.
NOT: Bu uygulamayı C# ile yazdığımızı düşünelim.
Oluşturduğumuz bu yeni sınıfı, IexceptionPublisher’dan kalıtmamız gerekmektedir.
Hataları bir .txt dosyasında yayınlayacağımızı düşünürsek;
private string m_LogFileName = @"C:\Hatalar.txt";
ifadesi ile bir tanımlama yapmamız gerekmektedir.
Sonrasında aldığınız hatayı, .txt dosyasına yazma işlemi gerçekleştirerek yazın.
Konfigürasyon dosyasında da aşağıdaki gibi bir tanım yapmanız gerekmektedir.
<exceptionManagement mode="on">
<publisher assembly="UygulamaAdı" type=" UygulamaAdı.OzelHataYayinlayiciniziTanimladiginizSinifAdi" exclude="*" include=" UygulamaAdı.HatayıYayınlayanMetot, UygulamaAdı"/>
</exceptionManagement>

Yeliz Korkmaz, MVP
yelizkorkmaz@tnn.net