Travailleurs .NET Core en tant que services Windows

Dans .NET Core 3.0, nous introduisons un nouveau type de modèle d'application appelé Worker Service. Ce modèle est destiné à vous donner un point de départ pour écrire des services de longue durée dans .NET Core. Dans cette procédure pas à pas, nous allons créer un travailleur et l'exécuter en tant que service Windows.



Créer un travailleur


Aperçu: dans nos versions d'aperçu, le modèle de travail se trouve dans le même menu que les modèles Web. Cela va changer dans une prochaine version. Nous avons l'intention de placer le modèle Worker Service directement dans l'assistant de création de projet.


Créer un travailleur dans Visual Studio


image


image


image


Créer un travailleur sur la ligne de commande


Exécuter dotnet new worker


image


Exécuter en tant que service Windows


Pour fonctionner en tant que service Windows, nous avons besoin que notre collaborateur écoute les signaux de démarrage et d'arrêt de ServiceBase type .NET qui expose les systèmes de service Windows aux applications .NET. Pour ce faire, nous voulons:


Ajoutez le package NuGet Microsoft.Extensions.Hosting.WindowsServices


image


Ajoutez l'appel UseServiceBaseLifetime à HostBuilder dans notre 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>(); }); } 

Cette méthode fait deux ou trois choses. Tout d'abord, il vérifie si l'application s'exécute réellement en tant que service Windows, si ce n'est pas le cas, elle noops qui rend cette méthode sûre pour être appelée lors de l'exécution locale ou lors de l'exécution en tant que service Windows. Vous n'avez pas besoin d'y ajouter de clauses de garde et vous pouvez simplement exécuter l'application normalement lorsqu'elle n'est pas installée en tant que service Windows.


Deuxièmement, il configure votre hôte pour utiliser un ServiceBaseLifetime . ServiceBaseLifetime fonctionne avec ServiceBase pour aider à contrôler la durée de vie de votre application lorsqu'elle est exécutée en tant que service Windows. Cela remplace la ConsoleLifetime par défaut qui gère les signaux comme CTL + C.


Installer le travailleur


Une fois que notre travailleur utilise ServiceBaseLifetime nous devons alors l'installer:


Tout d'abord, permet de publier l'application. Nous installerons le service Windows sur place, ce qui signifie que l'exe sera verrouillé chaque fois que le service est en cours d'exécution. L'étape de publication est un bon moyen de s'assurer que tous les fichiers dont j'ai besoin pour exécuter le service sont au même endroit et prêts à être installés.


 dotnet publish -oc:\code\workerpub 

Ensuite, nous pouvons utiliser l' utilitaire sc dans une invite de commande admin


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

Par exemple:


image


Note de sécurité: Cette commande fait exécuter le service en tant que système local, ce qui n'est généralement pas quelque chose que vous voudrez faire . Au lieu de cela, vous devez créer un compte de service et exécuter le service Windows en tant que ce compte. Nous n'en parlerons pas ici, mais il existe de la documentation sur les documents ASP.NET en parlant ici: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows- service? view = aspnetcore-2.2


Journalisation


Le système de journalisation dispose d'un fournisseur de journal des événements qui peut envoyer un message de journal directement au journal des événements Windows. Pour vous connecter au journal des événements, vous pouvez ajouter le package Microsoft.Extensions.Logging.EventLog , puis modifier votre Program.cs :


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

Travaux futurs


Dans les aperçus à venir, nous prévoyons d'améliorer l'expérience d'utilisation des travailleurs avec les services Windows en:


  1. Renommez UseWindowsServiceBaseLifetime en UseWindowsService
  2. Ajoutez une intégration automatique et améliorée avec le journal des événements lors de l'exécution en tant que service Windows.

Conclusion


Nous espérons que vous essayez ce nouveau modèle et que vous souhaitez nous faire savoir comment cela se passe, vous pouvez déposer des bugs ou des suggestions ici: https://github.com/aspnet/AspNetCore/issues/new/choose


Avatar
Glenn condron

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


All Articles