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.
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
Yorum Gönder