Makale Özeti

Bir önceki makalede bir windows servisi oluşturmayı ve varsayılan özelliklerini değiştirmeyi ele almıştık. Bu makalede ise olayları yönetmeyi ve windows servis uygulamamızdan olay günlüğüne kayıt eklemeyi ele alıyor olacağız.

Makale

Windows Servislerinin Olaylarının Yönetilmesi
Tüm windows uygulamaları gibi, windows servisleri de olayları desteklemektedir. Windows servislerinin desteklediği olaylar, servisin durumuna bağlı olarak değişiklik göstermektedir. Windows servisleri Start, Stop, Pause ve Continue olmak üzere toplamda dört olayı desteklemektedir.

Start Olayı

Start olayı, servis SCM aracılığıyla çalıştırıldığı anda tetiklenir. Start olayı tetiklendiğinde, sistem OnStart servisin prosedürünü işletir. Servis başladığı anda gerçekleştirilecek olayları tanımlamak için OnStart metodunu kullanırız. Servisimizi, yüklenmiş olduğu bilgisayar çalıştırıldığı anda çalışacak şekilde konfigure etmek için StartType özelliğini, ServiceStartMode enumeration’ının öğeleri olan Automatic, Manual ve Disabled değerlerinden biri ile tanımlarız. 


Stop Olayı
Bir servis SCM aracılığıyla durdurulduğunda Stop olayı tetiklenir ve OnStop prosedüründeki kodlar işletilir.  Stop olayı tetiklendiğinde servis, OnStop prosedüründe yer alan kodları işletmeden önce CanStop özelliğinin değerini denetler. CanStop özelliğinin değerinin True olması halinde OnStop prosedüründe yer alan kodlar işletilir, False değeri ile karşılaşılması halinde ise OnStop metodu işletilmez.

Bir servis durdurulduğunda, durdurulan servise bağlı tüm servisler durdurulmuş olur.

Pause Olayı
Servisin beklemeye alınması durumunda yapılmasını istediğimiz işlemleri OnPause olayında tanımlarız. Servisimiz, SCM’den Pause komutunu aldığında CanPauseAndContinue özelliğinin değerini denetler ve OnPause olayında tanımladığımız kodları, bu özelliğin değerinin true olması halinde işletir.

Continue Olayı

Servisin bekleme durumundayken yeniden çalıştırılması durumunda gerçekleştirilecek işlemleri OnContinue olayında tanımlarız.

Windows Servisinden Sistem Olay Günlüğüne Kayıt Eklenmesi

Windows servislerinde hata mesajlarını kullanıcıya görsel olarak görüntüleyemediğimiz için oluşan her türlü olayı olay günlüğüne kaydederiz. Olay günlüğüne erişerek işlem yapmak için Eventlog bileşenini kullanırız. Olay günlüğüne üç kategoride kayıt ekleyebiliriz.

·          System log
Driver gibi sistem aygıtları tarafından kaydedilen mesajlarını içerir.

·          Security log
Güvenlik değişikliklerine dair mesajları içerir.

·          Application log
Bilgisayardaki uygulamalar tarafından kaydedilen mesajları içerir.

Bu mesajları hata, uyarı, bilgi, success audit veya failure audit türünde kaydedebiliriz. Şekil: 1.1 olay günlüğünü göstermektedir.

Şekil: 1.1 :: Olay Günlüğü

Şekil 1.1’de gördüğünüz gibi uygulamalarımıza ait mesajları kaydetmek için standart kategoriler dışında ayrı kategoriler de oluşturmamız mümkündür.

Servis uygulamamızı bilgisayara yüklediğimizde, servis kurulumu AutoLog özelliğinin değerini denetler. Değerin true olması durumunda kurulum, servis uygulamasını Application log’a bir olay kaynağı olarak kaydeder. Bu noktadan sonra servisimiz her başladığında, durduğunda, beklemeye alındığında, devam ettirildiğinde, yüklendiğinde ve kaldırıldığında bilgileri otomatik olarak kaydedebilir. Ek olarak servisimiz exception’ların ve hataların kaydını tutabilir. Aşağıdaki kod bloğu olay günlüğüne nasıl kayıt ekleyebileceğimizi örneklemektedir:

protected override void OnStart(string[] args)

{

      EventLog.WriteEntry("Servis Başladı!");

}

protected override void OnStop()

{

      EventLog.WriteEntry("Servis Durdu!");

}

 

Özel Olay Kayıtları Oluşturmak

Sistem olay kayıtlarına ek olarak, uygulamalarımız için özel olay kayıtları oluşturabiliriz. Örneğin servisimize ait tüm olay kayıtlarının saklanması için özel olay kaydı oluşturabiliriz. Böylece servisimize ait tüm olayları ayrı bir alanda saklama imkanına sahip oluruz ve standart olay kayıtlarının silinmesi durumunda, servisimize ait kayıtları kaybetmemiş oluruz.

Özel olay kaydı oluşturmak için EventLog sınıfının CreateEventSource metodundan faydalarınız. Bu metodu kullanabilmek için System.Diagnostics alan adına referans eklememiz ve aşağıdaki adımları izlememiz gerekir.

 

1.      Servis uygulamamızın AutoLog özelliğini false olarak ayarlıyoruz

2.      ToolBox’ta yer alan EventLog bileşeninden bir adet sürükleyerek servis uygulamamıza ekliyoruz.

3.      Source özelliği için bir değer belirtiyor ve Log özelliğinde oluşturmak istediğimiz log dosyasının adını belirtiyoruz.

Özel olay kayıtlarını programatik olarak oluşturmak ta mümkündür ve aşağıdaki kod bu işlemi örneklemektedir:

private System.Diagnostics.EventLog eventLog1;

private void CreateEventLog()

{

      eventLog1 = new System.Diagnostics.EventLog();

      if (!System.Diagnostics.EventLog.SourceExists("Nutella Servisi"))

      {

                        System.Diagnostics.EventLog.CreateEventSource("Nutella Servisi",

                  "Nutella Servis Kayıtları");

      }

      eventLog1.Source = "Nutella Servisi";

}

Bu noktadan sonra OnStart() metodu içinde CreateEventLog() metodunu çağırabiliriz. Özel olay kaydını oluşturduktan sonra servis uygulamamız olay kayıtlarını bu alana kaydedebilir. Aşağıdaki kod oluşturulan özel olay kaydına ekleme yapmayı örneklemektedir:

protected override void OnStart(string[] args)

{

      CreateEventLog();

      eventLog1.WriteEntry("Nutella Servisi Başladı!..",

            EventLogEntryType.Information);

}

Bir sonraki bölümde geliştirdiğimiz servisi bilgisayara yüklemek için kurulum oluşturmayı, güvenlik ile ilgili tanımlamaları yapmayı ve windows servislerinin bilgisayara kurulumunu ve kaldırılmasını ele alıyor olacağız.

 

 

Kaynaklar:
. Microsoft Developers Network (http://msdn.microsoft.com)
. Technet (http://technet.microsoft.com/)
. Developing XML Web Services and Server Components with Microsoft Visual Basic .NET and Microsoft Visual C# .NET ()