Şimdi efendim bilen bilir, Maykrosoft Visual Studio.NET ile çalışırken, bir windows service yazdığınızda, yazdığınız servis üzerinde hata ayıklaması yapamıyorsunuz normal koşullarda. Yok efendim neymiş Windows Servislerinde debugging yapılmazmış, mıy mıy mıy, bok püsür. Tipik Maykrosoft davranışı
Eee böyle bir durumda da yazılımcılar gayet zorluk yaşıyorlar, yazdıkları servisin nasıl davrandığını test edemiyorlar, hata ayıklaması yapamıyorlar. Dolayısıyla bu da ortaya çıkacak olan servisin, uygulamanın gecikmesine neden oluyor.
Şimdi efenim peki biz bu sorunu nasıl aşıcaz? Şöyle ki,
Visual Studio.NET’te bir Windows Service projesi oluşturduğunuzda, şablon olarak karşınıza Main() metodu aşağıdaki gibi bir şablonla gelecek.
// The main entry point for the process static void Main() { System.ServiceProcess.ServiceBase[] ServicesToRun; // More than one user Service may run within the same process. To add // another service to this process, change the following line to // create a second service object. For example, // // ServicesToRun = new // System.ServiceProcess.ServiceBase[] {new Service1(), // new MySecondUserService()}; // ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun); }
ve siz de bu şablon üzerinden servisinizi yazmaya başlayacaksınız ama servisinizi debug
edemeyeceksiniz. Bunun için Main() metodunda aşağıdaki gibi ufak bir değişiklik yapmanız gerekiyor.
// The main entry point for the process static void Main() { #if (!DEBUG) System.ServiceProcess.ServiceBase[] ServicesToRun; ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun); #else // Debug kodu: bu kısım process'in servis olarak çalışmasını önler // Servisin başlangıç metodunu çalıştıracak ancak processi hiçbir zaman öldürmeyecek // Çıkmak için debugger'ı kapatmanız gerekiyor Service1 service = new Service1(); service.<Servisinizin birincil metodunu buraya yazın>(); // Aşağıdaki satırın önüne bir breakpoint koyarak servisinizin // hemen bitişinde onu yakalayabilirsiniz System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); #endif }
Bir windows servisini debug etmek için C# direktiflerini kullanarak servisin debug modunda farklı bir kodu, release modunda farklı bir kodu çalıştırmasına olanak sağlıyoruz. Yukarıda kırmızı olarak yazılmış “Servisinizin birincil metodunu buraya yazın” kısmına da yazdığımız ilgili servise ait, kendimizin oluşturduğu bir metotu çağırıyoruz. Hepsi bu kadar işte
iyi kodlamalar
Merhaba
windows service ile ilgili bir problemim var
Umarım yanıtlarsını.
WS de Try komutunu kullandıktan sonra Hata alındığında service kendini
otomotik olarak stop a alıyor.
Böyle yapmasını tercih etmiyorum.
Tekrar deneyip Hatayı txt dosyasına yazması istiyorum.
Hatayı yazıyor arkasındadda Service kapatıyor.
Buda normal bir kapatma değil.
Kapandığı zaman (onstop) mail göndermesini istiyorum.
Fakat göndermiyor. Çünkü normal bir kapanma işlemi olmadığı anlaşılıyor.
Kendim Stop moduna aldığımda mail hesabıma geliyor.
Umarım yardımcı olursunuz
Selamlar
Örnek kod gönderebilir misin Hüseyin?