Pekerja Inti NET sebagai Layanan Windows

Di .NET Core 3.0 kami memperkenalkan jenis baru templat aplikasi yang disebut Worker Service. Templat ini dimaksudkan untuk memberi Anda titik awal untuk menulis layanan yang berjalan lama di .NET Core. Dalam langkah-langkah ini kami akan membuat pekerja dan menjalankannya sebagai Layanan Windows.



Buat pekerja


Pratinjau Catatan: Dalam rilis pratinjau kami, templat pekerja ada di menu yang sama dengan templat Web. Ini akan berubah di rilis mendatang. Kami bermaksud untuk menempatkan templat Layanan Pekerja langsung di dalam panduan pembuatan proyek baru.


Buat Pekerja di Visual Studio


gambar


gambar


gambar


Buat Pekerja di baris perintah


Jalankan dotnet new worker


gambar


Jalankan sebagai Layanan Windows


Untuk menjalankan sebagai Layanan Windows, kami membutuhkan pekerja kami untuk mendengarkan sinyal mulai dan berhenti dari ServiceBase tipe .NET yang memaparkan sistem Layanan Windows ke aplikasi .NET. Untuk melakukan ini kami ingin:


Tambahkan paket NuGet Microsoft.Extensions.Hosting.WindowsServices


gambar


Tambahkan panggilan UseServiceBaseLifetime ke HostBuilder di Program.cs kami


 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceBaseLifetime() .ConfigureServices(services => { services.AddHostedService<Worker>(); }); } 

Metode ini melakukan beberapa hal. Pertama, ia memeriksa apakah aplikasi tersebut benar-benar berjalan sebagai Layanan Windows, jika tidak maka tidak ada yang membuat metode ini aman untuk dipanggil ketika dijalankan secara lokal atau ketika dijalankan sebagai Layanan Windows. Anda tidak perlu menambahkan klausul penjaga dan hanya dapat menjalankan aplikasi secara normal saat tidak diinstal sebagai Layanan Windows.


Kedua, ini mengonfigurasi host Anda untuk menggunakan ServiceBaseLifetime . ServiceBaseLifetime bekerja dengan ServiceBase untuk membantu mengontrol masa pakai aplikasi Anda ketika dijalankan sebagai Layanan Windows. Ini menimpa ConsoleLifetime default yang menangani sinyal seperti CTL + C.


Instal Pekerja


Setelah pekerja kami menggunakan ServiceBaseLifetime kami harus menginstalnya:


Pertama, mari publikasikan aplikasinya. Kami akan menginstal Layanan Windows di tempat, artinya exe akan dikunci setiap kali layanan berjalan. Langkah mempublikasikan adalah cara yang bagus untuk memastikan semua file yang saya butuhkan untuk menjalankan layanan berada di satu tempat dan siap untuk diinstal.


 dotnet publish -oc:\code\workerpub 

Kemudian kita bisa menggunakan utilitas sc dalam prompt perintah admin


 sc create workertest binPath=c:\code\workerpub\WorkerTest.exe 

Sebagai contoh:


gambar


Catatan keamanan: Perintah ini menjalankan layanan sebagai sistem lokal, yang biasanya bukan sesuatu yang ingin Anda lakukan . Alih-alih, Anda harus membuat akun layanan dan menjalankan layanan windows sebagai akun itu. Kami tidak akan membicarakan hal itu di sini, tetapi ada beberapa dokumentasi tentang dokumen ASP.NET yang membicarakannya di sini: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows- layanan? view = aspnetcore-2.2


Penebangan


Sistem pencatatan memiliki penyedia Log Kejadian yang dapat mengirim pesan log langsung ke Log Kejadian Windows. Untuk masuk ke log peristiwa Anda dapat menambahkan paket Microsoft.Extensions.Logging.EventLog dan kemudian memodifikasi Program.cs Anda:


 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); }); 

Pekerjaan di masa depan


Dalam pratinjau mendatang, kami berencana untuk meningkatkan pengalaman menggunakan Pekerja dengan Layanan Windows dengan:


  1. Ganti nama UseWindowsServiceBaseLifetime menjadi UseWindowsService
  2. Tambahkan integrasi otomatis dan yang ditingkatkan dengan Log Kejadian saat berjalan sebagai Layanan Windows.

Kesimpulan


Kami harap Anda mencoba templat baru ini dan ingin Anda memberi tahu kami bagaimana hasilnya, Anda dapat mengajukan bug atau saran di sini: https://github.com/aspnet/AspNetCore/issues/new/choose


Avatar
Glenn condron

Source: https://habr.com/ru/post/id446508/


All Articles