C#'da Windows Hizmetlerine Giriş
Windows hizmetleri, .NET ekosisteminde kullanıcı müdahalesi olmadan arka plan görevleri gerçekleştirerek güçlü araçlar sağlar. C# ile bir Windows hizmeti oluşturmak karmaşık gelebilir; ama Tim Corey, videosunda "C#'ta Windows Hizmetlerine Giriş - Topshelf kullanarak nasıl bir hizmet oluşturulur, yüklenir ve kullanılır" konusunu adım adım açıklıyor.
Bu makalede, o videoyu adım adım inceleyerek her konuyu ele alacak ve netlik ile süreklilik sağlayacağız.
Windows Hizmetlerine Giriş
Tim, Windows hizmetlerini güçlü ama sıklıkla gözden kaçan otomasyon araçları olarak tanıtıyor. Bu uygulamalar, bir kullanıcı arayüzüne ihtiyaç duymadan görevleri yerine getirmek için arka planda çalışacak şekilde tasarlanmıştır. Yaygın örnekler arasında SQL Server Agent veya Hyper-V hizmetleri bulunur.
Tim, C#'ta ustalaşmak için pratik yapmanın önemini vurguluyor. Uygulamalı deneyim kazanmak için video açıklamasında bağlantılı kaynak kodunu indirmeyi öneriyor.
Konsol Demo Uygulaması Oluşturma
Visual Studio kullanarak Tim, SimpleHeartbeatService adlı yeni bir konsol uygulama projesi oluşturur. Bir Windows Hizmet projesi şablonu kullanabilir; ancak Tim, hata ayıklama kolaylığı için konsol yaklaşımını tercih ediyor.
"Buradaki düşünce, buraya ne kod koyduğum değil; bunun yerine hizmetin kendisinin nasıl oluşturulacağıdır." diyor Tim.
Windows Hizmeti Nedir?
Tim, Başlat menüsü araması kullanarak Windows'ta Hizmetler sekmesini açar ("hizmetler" yazıp Enter'a basmanız yeterlidir). Arka planda çalışan hizmetlerin uzak masaüstü veya MySQL sunucusu gibi hayati işletim sistemi işlevlerini gerçekleştirdiğini açıklar.
Amaç, özel kod kullanarak bu listeye yeni bir giriş oluşturmaktır.
Visual Studio Proje Türleri: Konsol Uygulaması ile Windows Hizmeti
Visual Studio'daki Windows Hizmeti projesini seçmek cazip gelebilir; ancak Tim, bu yaklaşımın hata ayıklamayı zorlaştırdığını açıklar. Bunun yerine, konsol uygulaması canlı bir hizmete hata ayıklayıcı ekleme ihtiyacını azaltarak yerel olarak çalıştırmanıza ve test etmenize olanak tanır.
"Yerleşik hizmet türü proje, hata ayıklamayı zorlaştırır; çünkü önce yüklemeniz, ardından hata ayıklayıcı eklemeniz gerekir."
NuGet Üzerinden Topshelf Ekleme
Hizmet uygulamasını kolaylaştırmak için Tim, NuGet aracılığıyla açık kaynaklı bir çerçeve olan Topshelf'i ekler. Milyonlarca indirmeye sahip bu popüler kütüphane, şablon kod olmadan Windows hizmetleri oluşturmanıza yardımcı olur.
Adımlar:
Referanslara sağ tıklayın
NuGet Paketlerini Yönet'i seçin
- Topshelf'i arayın ve yükleyin
Hizmet Mantığını Yazma
Tim, Start() ve Stop() olmak üzere iki genel yönteme sahip bir Heartbeat sınıfı oluşturur. Yapıcıda her saniye çalışacak bir System.Timers.Timer kurar.
Bu zamanlayıcının Elapsed olayı, C:\temp\demos\ klasöründe bir .txt dosyasına geçerli zamanı ekler. Bu, sürekli çalışan bir arka plan görevini taklit eder.
"Bu zamanlayıcı her saniyede bir metin dosyasına yazarak hizmetin çalışır durumda olduğunu gösterecektir."
Bu, klasör tarama veya belge yazdırma gibi gerçek hizmetlerde uzun süre çalışan süreçlerin nasıl işlediğini simüle eder.
Topshelf ile Hizmeti Bağlama
HostFactory.Run kullanarak Tim, Topshelf'i uygulamaya entegre eder:
Heartbeat sınıfını tanımlar
Start() ve Stop() yöntemlerini eşleştirir
- Gerekli izinleri vermek için hizmeti LocalSystem olarak yapılandırır
Hizmet için meta verileri de ayarlar:
Hizmet adı: HeartbeatService
Görünen ad: Heartbeat Servisi
- Açıklama: YouTube videosunda gösteri amacıyla kullanıldı
Hizmeti Konsol Uygulaması Olarak Çalıştırmak
Yükleme öncesi Tim, uygulamayı test etmek için çalıştırır. Zamanlayıcı doğru biçimde heartbeat.txt dosyasına zaman damgası ekler. Notepad++'ın İzleme özelliğini kullanarak gerçek zamanlı güncellemeleri gösterir.
Hizmeti Yüklemek ve Doğrulamak
Tim, .exe ve ilgili dosyaları bin\Debug klasöründen kalıcı bir konuma (örneğin C:\demos\HeartbeatService) kopyalar. Yönetici komut istemini kullanarak şu komutları çalıştırır:
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe startSimpleHeartbeatService.exe install
SimpleHeartbeatService.exe startBu, hizmeti Hizmet Denetim Yöneticisi'ne ekler. Hizmetler sekmesini tekrar açıp Yenile'ye tıkladığında, hizmet artık görünür ve çalışır durumdadır.
"Bir hizmet yüklemek çok kolaydır ve bir hizmetle işlem yapmak son derece basittir."
Kaldırmak için:
SimpleHeartbeatService.exe uninstallSimpleHeartbeatService.exe uninstallÖzet: Faydalar ve Dikkat Edilmesi Gerekenler
Tim, Topshelf ile bir hizmet oluşturmanın ve yüklemenin basit olduğunu özetler. Ancak, sonsuz dosya yazımının depolama sorunlarına yol açabileceği konusunda uyarır; bu, doğru günlük yönetimi için önemli bir hatırlatmadır.
Gerçek Hayatta Hizmet Fikirleri
Tim, Windows hizmetleri için pratik fikirler paylaşır:
Klasör temizliği: İndirmeler klasöründen eski dosyaları silin
Görsel düzenleme: Fotoğrafları tarihe göre klasörlere ayırın
CSV işleme: Bir klasörü izleyin ve CSV'leri otomatik olarak veritabanına aktarın
- E-posta otomasyonu: Yardım masası tablosunu izleyin ve bildirimler gönderin
Bu örnekler, arka plan görevlerini otomatikleştirmek ve SQL Server, OneDrive ile görev zamanlayıcılarla entegrasyon için hizmetlerin nasıl kullanılacağını gösterir.
Son Düşünceler
Tim, geliştiricileri denemeye teşvik ederek bitiriyor. Bellek, depolama ve olay günlüğü konusunda dikkatli olun. Otomatik güncelleme, güvenlik ayarları veya daha dayanıklı kurulum gerekiyorsa daha fazla yapılandırma gerekebilir.
"Burada büyük bir güç var ve yapabileceğiniz çok şey var."
Sonuç
Tim Corey'nin ayrıntılı açıklaması ile birlikte video'sunda C# ile bir Windows hizmeti oluşturmak erişilebilir ve pratiktir. Topshelf kullanarak bir konsol uygulaması, minimum kurulumla tam olarak çalışan bir Windows hizmetine dönüştürülebilir. Günlük dosyalarını yönetiyor, veritabanı olaylarını işliyor veya otomasyon yapıyorsanız, hizmetler gerçek zamanlı arka plan .NET Framework ya da .NET Core uygulamaları oluşturmanız için güçlü ve ölçeklenebilir bir yol sunar.
Bu öğreticiyi hizmetleri verimli biçimde anlamak, oluşturmak ve yüklemek için eksiksiz bir rehber olarak kullanın. Tamamen test etmeyi ve komut istemini her zaman yönetici olarak çalıştırmayı unutmayın.



