Respond needs javascript to run. To find out more click here
windows servisleri » Serdar Demir
RSS
 

Posts Tagged ‘windows servisleri’

C# Windows servisleri

22 Nis

C# Windows servisleri

Öncelikle servis nedir  ondan bahsedelim.  Bildiğimiz gibi servsiler genel de bilgisyar açıldığında  arka planda devreye giren ve işlemler yapan programlardır bilgisayarımızda çalışan hizmetleri “Yönetimsel araçlardan görebiliriz” Örneğin sql server ın ajan servisini sürekli kullanmayacaksanız bunu “Hizmeti durdur” diyerek bu hizmet i gerçekleştrimek için kullanılan ram i başka işlemlerde kullanarak performansınızı arttırabilirsiniz.

Şimdi c# kullanarak kendi servisimizi yapıp aynı sql server ajanı tarzı bir servis geliştirelim  ben kısaca programın nasıl çalışmasını istediğimi anlatayım öncelikle bir store procedure ümüz olacak ve store procedure benim istediğim veritabanın yedeğini alacak tabi bu işlemi de c# ta benim yaptığım servisleri kullanarak yapacak. Peki nasıl yapabiliriz öncelike

New project diyerek “windows service” ekliyoruz. Bize  Service1 adında bir class oluşturuyor bunu sınıf içerisinde bir windows servisinde kullanılan temel metodlar “OnStart()” servis başlatıldığında ne olması gerektiği “OnStop() “ servis kapatıldığında yapılacak işlem vb. Bunlara ek olarak bizde override ederek  OnPause() OnContinue() gibi override edilebilir metodları ekleyebiliriz . Bunlara ek olarak diyelim ki bizim servisimiz parametre ile çalışacak olsun böyle bir durumda OnCustomCommand() metodunu overrice ederek kullanabilirsiniz kısaca örnek vereyim aşağıdaki kod parçası biz servisi çalıştırıken gönderdiğimiz parametre 1 olduğu zaman c dizinine dosya.txt yi oluşturuyor.

protected override void OnCustomCommand(int command)

{

switch (command)

{

case 1:

StreamWriter str = new StreamWriter("c:\\dosya.txt");

str.Write("1");

str.Close();

break;

}

}

Bu metodu kullanarak bizim yapacağımız uygulamada kullanıcıdan connection string i isteyerek o veritabanın yedeğini alabiliriz J

Şimdi programımıza geçelim öncelikle store procedure ümüzü oluşturuyoruz.

CREATE PROCEDURE yedeklerim AS

BACKUP DATABASE yeni

TO DISK='d:\yeni.bak'

WITH FORMAT,

MEDIANAME = 'yeniveritabanı0',

MEDIADESCRIPTION = 'Striped media set for yeni veritabanı ';

Yedeğini alacağımız veritabanı adını ve nereye yedeğini almak istediğimizi giriyoruz ve kaydediyoruz.

Şimdi servisimizin kodlarını açıp bu store procedure u programdan çağıralım  Servisimizin Onstart olayına aşağıdaki kodları yazıyoruz.

protected override void OnStart(string[] args)

{

SqlConnectionStringBuilder ayar = new SqlConnectionStringBuilder();

ayar.DataSource = "YUHUBAA\\SQLEXPRESS";

ayar.InitialCatalog = "master";

ayar.IntegratedSecurity = true;

SqlConnection con = new SqlConnection(ayar.ConnectionString);

con.Open();

SqlCommand komut = new SqlCommand("yedeklerim", con);

komut.ExecuteNonQuery();

}

Artık servisimizi oluşturduk sıra geldi servisimizi windows hizmetlerine yüklemeye. Bu işlem için servisimizin design kısmında sağ tıklayıp “Add Installer” diyrouz ve bize “serviceProcessInstaller1” ve “serviceInstaller1” kontrollerini oluşturuyor. Burda bizim için önemli olan processinstaller kontrolü bu kontrolün properties kısmından Account özelliğini seçiyoruz biz “NetworkService” yapıyoruz. Servisimizi kaydedip derliyoruz ve bir exe oluşturuyor. Şimdi bu exe yi servislerimize yükleyelim Visual Studio tool tan visual studio 2008 command prompt u açıyoruz (aynı işlemi cmd ile de gerçekleştirebilirsizin)

Prompt u açıp “installutil ” yazıp yanına servisimizin exe sinin adresini verip yuklüyoruz. Artık servisimiz windows hizmetlerinin içerisinde yer alıyor biz bu servisi start ettiğimizde veritabanın yedeğini almış oluyoruz.

Aşağıda bizim servisimizin yuklendiğini görüyoruz.

(not: servisi uninstall yapmak için installutilden sonra –u dememiz gerekiyor).

Şimdi yaptığımız servisi c# projemizde nasıl kullanacağız ?

Yeni bir windows form açıyoruz ve toolbox tan “serviceController1” ekliyoruz ve properties kısmında yer alan ServiceName kısmından kendi oluşturduğumuz servisi yada kullanmak istediğimiz servisi esçiyoruz.

(aynı işlemi server explorer kısmından sol tarafta gördüğümüz servislerden kullanmak istediğimizi sürükleyip kullanabiliriz.)

Artık aşağıdaki gibi kodları kullanabiliriz.

serviceController1.Start();

serviceController1.Pause();

serviceController1.Continue();

serviceController1.ExecuteCommand(1);
 
4 Comments

Posted in C#, Makaleler