.NET Core ile Windows Servis Uygulaması Oluşturma (Worker Services)


Worker Service, .NET Core 3.0 versiyonundan itibaren proje şablonu olarak gelmiştir. Windows servis mantığında çalışan Worker Servisler, cross-platform olarak arka planda çalışan servisler olup Windows ve Linux sunucularında çalıştırılabilir.

Proje kurulumu, sınıfları inceledikten sonra bir Windows servis mantığında çalışacak örnek uygulama üzerinden worker servisi anlatacağım.

Proje oluşturma adımları

Visual Studio'da Worker Service oluşturma adımları aşağıdaki gibidir.
Yeni proje oluştur'a tıklanır.
Worker Service seçilir.

Proje ismi verilir ve ilerlenir.

NET Core 3.1 seçilir ve ilerlenir.


Proje kurulduktan sonra Program.cs dosyasında uygulamanın başlangıç noktası olan Main metodu bulunmaktadır. Bu metot IHostBuilder dönüş tipinde CreateHostBuilder metodunu çağıracaktır.

CreateHostBuilder metodu, Worker sınıfını kullanacak servisin çalıştırılma işlemini yapar. Worker sınıfı, varsayılan olarak gelmektedir, farklı isimde bir sınıf oluşturulabilir. 

Worker sınıfını inceleyecek olursak BackgroundService sınıfından miras alır. Bu sınıf servisin çalıştırılması, başlatılması, durdurulması, dispose gibi metotları barındırır. Aşağıdaki görselde BackgroundService sınıfına ait metotlar yer alır. 







  • ExecuteAsync metodu, servis arka planda çalışır durumdayken yapılacak işlemleri barındırır.  Abstract bir metot olduğu için Worker sınıfında kullanılması zorunludur. Metotta kullanılan stoppingToken parametresi, servis durdurulmasının tetiklenip tetiklenmediği bilgisini alır. Tetiklenme işlemi olmayana dek arka planda bu işlemler sürecektir.  
  • StartAsync metodu, servisin başlatılma aşamasında yapılacak işlemleri barındırır. Örnek olarak bir log dosyasına “Servis başlatıldı.” bilgisi yazdırılabilir.
  • StopAsync metodu, servisin durdurulması sırasında yapılacak işlemleri barındırır. Örnek olarak bir log dosyasına “Servis durduruldu.” bilgisi yazdırılabilir.
  • Dispose metodu ise kullanılmayan kaynakların serbest bırakılması işini yapar. Bir veri tabanı bağlantısının kapatılması ya da sınıf instance’lerinin bellekten temizlenmesi işini yapar. (Garbage Collector)

Worker Servisin Windows Servis olarak çalışması için Nuget’tan aşağıdaki paketin kurulması gerekmektedir.

Microsoft.Extensions.Hosting.WindowsServices

.NET Core 3.1 versiyonunda projeyi geliştireceğim için 3.1.10 versiyonu kurulacaktır. .NET 5 üzerinde kullanılacaksa uygun versiyon kurulmalıdır.


Kurulum tamamlandıktan sonra dependencies kısmındaki packages altında kurulduğu görülebilir.

Paketlerin kurulumu tamamlandıktan sonra Program.cs sınıfındaki CreateHostBuilder metodunda UseWindowsService() metodu eklenerek Windows servis olarak geliştirdiğimiz servisi çalıştırabileceğiz. 

Örnek uygulamada; veri tabanı backup dosyalarının belirtilen sürede bir silinmesini sağlayan bir servis kurgulandı. Amaç diskte yer kaplamasını önlemektir. Servisin adı DeleteBackUpFileService'dir.

Worker.cs dosyasında StartAsync metodunda appsettings.json dosyasından backup dosyalarının klasör yolu ile servisin ne kadar sürede bir dosyaları sileceği bilgisini alır. Bunu servis başlatılırken yapacaktır.
 
ExecuteAsync metodunda ClearBackUpFile() metodu çağrılır. Bu metot ile _backUpFilePath değişkeninde bulunan backup dosyalarını silme işlemini yapılır. Silme işlemini 7 günde bir yapmasını istediğimizi belirttik. Bu bilgiyi _serviceRunInDays değişkeni tutar. Task.Delay metodu ile servis arka planda çalıştığı süre boyunca 7 günde bir bu işlemi yapması için bekletecektir. 

Publish Adımları
Projeye sağ tıklayarak Publish'e tıklanır. Açılan pencerede publish dosyalarını klasörde oluşturmasını istediğimiz için Folder seçilir.


Aşağıdaki pencerede publish dosyalarını oluşturacağımız yeri seçtik.

                           
Publish ayarları yapılır. Release modda configuration olması önemlidir. Kurulacak sunucuya göre Deployment mode, target runtime ayarlanır. 


Ayarlar tamamlandıktan sonra Publish butonuna tıklanır.


Publish işleminden sonra yönetici olarak command penceresi açılmalıdır. sc create işlemi ile servisin adı ve exe dosyasının yolu aşağıdaki gibi oluşturulmalıdır. Success uyarısı ile servis kurulumu başarı ile tamamlanmış olacaktır.


Backup dosyaları servis çalıştırılmadan önce aşağıdaki gibidir. Servisi başlattıktan sonra bu dosyalar silinmiş olacaktır.

Servisin çalıştığının görüntüsü aşağıdaki gibidir. Çalıştıktan sonra 7 günde bir .bak uzantılı dosyaları silmesi beklenir.


Oluşturduğum projenin kaynak kodları Github hesabımda mevcuttur. İncelemek için linke tıklayınız.

Keyifli okumalar :)

Yorumlar