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

Pekerja penciptaan
Catatan Dalam versi pra-rilis kami, templat pekerja ada di menu yang sama dengan templat web. Ini akan berubah di rilis mendatang. Kami bermaksud untuk menempatkan templat Layanan Pekerja secara langsung di Create New Project Wizard.
Membuat Pekerja di Visual Studio



Menciptakan Pekerja di Baris Perintah
Jalankan dotnet new worker

Berjalan sebagai layanan Windows
Untuk memulai sebagai layanan Windows, kami membutuhkan pekerja kami untuk melihat sinyal mulai dan berhenti dari ServiceBase
.NET, yang menghubungkan sistem Layanan Windows ke aplikasi .NET. Untuk melakukan ini, Anda perlu:
Tambahkan Microsoft.Extensions.Hosting.WindowsServices
Paket NuGet

Tambahkan panggilan UseServiceBaseLifetime
ke HostBuilder
di Program.cs
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 benar-benar berfungsi sebagai layanan Windows, jika tidak, maka ia melakukan noops, yang membuat metode ini aman untuk dipanggil saat menjalankan secara lokal atau sebagai layanan Windows.
Kedua, ini mengonfigurasi host Anda untuk menggunakan ServiceBaseLifetime
. ServiceBaseLifetime
bekerja dengan ServiceBase
untuk membantu mengontrol masa hidup aplikasi Anda ketika dimulai sebagai layanan Windows. Ini menimpa ConsoleLifetime
standar yang menangani sinyal seperti CTL + C.
Instal Pekerja
Setelah kami mendapatkan pekerja menggunakan ServiceBaseLifetime
kita perlu mengaturnya:
Pertama, mari kita terbitkan aplikasinya. Kami akan menginstal Layanan Windows di tempat, yang berarti bahwa executable akan diblokir setiap kali layanan dimulai. Penerbitan adalah cara yang baik untuk memastikan bahwa semua file yang diperlukan untuk memulai layanan berada di satu tempat dan siap untuk diinstal.
dotnet publish -oc:\code\workerpub
Selanjutnya, Anda dapat menggunakan utilitas sc di baris perintah admin
sc create workertest binPath=c:\code\workerpub\WorkerTest.exe
Sebagai contoh:

Catatan keamanan: Perintah ini memulai layanan sebagai sistem lokal, yang bukan yang Anda butuhkan . Sebagai gantinya, Anda harus membuat akun layanan dan memulai layanan Windows sebagai akun ini. Kami tidak akan membicarakan hal ini di sini, tetapi ada beberapa dokumentasi ASP.NET di sini: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore- 2.2
Penebangan
Sistem pencatatan memiliki layanan Log Kejadian, yang dapat mengirim pesan log langsung ke log peristiwa Windows. Untuk memasukkan log peristiwa, Anda bisa 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 selanjutnya
Dalam pratinjau berikut, kami berencana untuk meningkatkan penggunaan Pekerja dengan Layanan Windows:
- Ganti nama UseWindowsServiceBaseLifetime menjadi UseWindowsService
- Tambahkan integrasi otomatis dan lebih baik dengan log peristiwa saat startup sebagai layanan Windows.
Kesimpulan
Kami harap Anda akan mencoba templat baru kami dan ingin tahu cara kerjanya. Anda dapat mengirim pesan kesalahan atau saran di sini: https://github.com/aspnet/AspNetCore/issues/new/choose
