.NET Core Worker als Windows-Dienste

In .NET Core 3.0 führen wir eine neue Art von Anwendungsvorlage mit dem Namen Worker Service ein. Diese Vorlage soll Ihnen einen Ausgangspunkt für das Schreiben von Diensten mit langer Laufzeit in .NET Core bieten. In dieser exemplarischen Vorgehensweise erstellen wir einen Worker und führen ihn als Windows-Dienst aus.




Schöpfungsarbeiter


Hinweis In unseren Vorabversionen befindet sich die Worker-Vorlage im selben Menü wie die Webvorlagen. Dies wird sich in einer zukünftigen Version ändern. Wir beabsichtigen, die Worker Service-Vorlage direkt im Assistenten zum Erstellen neuer Projekte zu platzieren.


Erstellen eines Workers in Visual Studio


Bild


Bild


Bild


Erstellen eines Workers in der Befehlszeile


Führen Sie dotnet new worker


Bild


Wird als Windows-Dienst ausgeführt


Um als Windows-Dienst zu starten, muss unser Mitarbeiter Start- und Stoppsignale vom Typ ServiceBase .NET sehen, der Windows-Dienstsysteme mit .NET-Anwendungen verbindet. Dazu benötigen Sie:


Fügen Sie das NuGet-Paket Microsoft.Extensions.Hosting.WindowsServices


Bild


Fügen Sie UseServiceBaseLifetime in HostBuilder UseServiceBaseLifetime Aufruf HostBuilder


 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>(); }); } 

Diese Methode macht ein paar Dinge. Zunächst wird überprüft, ob die Anwendung wirklich als Windows-Dienst funktioniert. Wenn dies nicht der Fall ist, werden Noops ausgeführt, wodurch diese Methode sicher aufgerufen werden kann, wenn sie lokal oder als Windows-Dienst ausgeführt wird.


Zweitens wird Ihr Host für die Verwendung von ServiceBaseLifetime konfiguriert. ServiceBaseLifetime arbeitet mit ServiceBase , um die Lebensdauer Ihrer Anwendung zu steuern, wenn diese als Windows-Dienst gestartet wird. Dies überschreibt die Standard- ConsoleLifetime die Signale wie CTL + C verarbeitet.


Installieren Sie Worker


Sobald der Worker ServiceBaseLifetime , müssen wir ServiceBaseLifetime festlegen:


Lassen Sie uns zuerst die App veröffentlichen. Wir werden den Windows-Dienst direkt installieren, was bedeutet, dass die ausführbare Datei bei jedem Start des Dienstes blockiert wird. Durch das Veröffentlichen können Sie sicherstellen, dass sich alle zum Starten des Dienstes erforderlichen Dateien an einem Ort befinden und zur Installation bereit sind.


 dotnet publish -oc:\code\workerpub 

Als Nächstes können Sie das Dienstprogramm sc in der Befehlszeile admin verwenden


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

Zum Beispiel:


Bild


Sicherheitshinweis: Dieser Befehl startet den Dienst als lokales System, was nicht erforderlich ist . Stattdessen sollten Sie ein Dienstkonto erstellen und den Windows-Dienst als dieses Konto starten. Wir werden hier nicht darüber sprechen, aber es gibt hier einige ASP.NET-Dokumentationen: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore- 2.2


Protokollierung


Das Protokollierungssystem verfügt über einen Ereignisprotokolldienst, der Protokollnachrichten direkt an das Windows-Ereignisprotokoll senden kann. Um in das Ereignisprotokoll einzutreten, können Sie das Paket Microsoft.Extensions.Logging.EventLog hinzufügen und anschließend Ihre Program.cs ändern:


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

Weitere Arbeit


In den folgenden Voransichten planen wir, die Verwendung von Workern mit Windows-Diensten zu verbessern:


  1. Benennen Sie UseWindowsServiceBaseLifetime in UseWindowsService um
  2. Fügen Sie beim Start als Windows-Dienst eine automatische und verbesserte Integration in das Ereignisprotokoll hinzu.

Fazit


Wir hoffen, dass Sie unsere neue Vorlage ausprobieren und wissen möchten, wie sie funktioniert. Sie können hier Fehlermeldungen oder Vorschläge senden: https://github.com/aspnet/AspNetCore/issues/new/choose


Avatar
Glenn Kondron

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


All Articles