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 conçu pour 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.




Travailleur de création


Remarque Dans nos versions préliminaires, 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éation d'un travailleur dans Visual Studio


image


image


image


Création d'un travailleur sur la ligne de commande


Exécuter dotnet new worker


image


Exécution en tant que service Windows


Pour démarrer en tant que service Windows, nous avons besoin que notre travailleur voit les signaux de démarrage et d'arrêt du type ServiceBase .NET, qui connecte les systèmes de service Windows aux applications .NET. Pour ce faire, vous avez besoin de:


Ajouter Microsoft.Extensions.Hosting.WindowsServices package NuGet Microsoft.Extensions.Hosting.WindowsServices


image


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

Cette méthode fait plusieurs choses. Premièrement, il vérifie si l'application fonctionne vraiment comme un service Windows, si ce n'est pas le cas, puis il exécute noops, ce qui rend cette méthode sûre à appeler lors de l'exécution locale ou en tant que service Windows.


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


Installer le travailleur


Une fois que le travailleur a utilisé ServiceBaseLifetime nous devons le définir:


Tout d'abord, publions l'application. Nous installerons le service Windows sur place, ce qui signifie que l'exécutable sera bloqué à chaque démarrage du service. La publication est un bon moyen de s'assurer que tous les fichiers nécessaires au démarrage du service sont au même endroit et prêts à être installés.


 dotnet publish -oc:\code\workerpub 

Ensuite, vous pouvez utiliser l' utilitaire sc dans la ligne de commande admin


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

Par exemple:


image


Note de sécurité: cette commande démarre le service en tant que système local, ce qui n'est pas ce dont vous avez besoin . Au lieu de cela, vous devez créer un compte de service et démarrer le service Windows en tant que ce compte. Nous n'en parlerons pas ici, mais il existe de la documentation ASP.NET 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 service de journal des événements, qui peut envoyer des messages de journal directement au journal des événements Windows. Pour accéder 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 ultérieurs


Dans les aperçus suivants, nous prévoyons d'améliorer l'utilisation des travailleurs avec les services Windows:


  1. Renommez UseWindowsServiceBaseLifetime en UseWindowsService
  2. Ajoutez une intégration automatique et améliorée avec le journal des événements au démarrage en tant que service Windows.

Conclusion


Nous espérons que vous essayerez notre nouveau modèle et voudrez savoir comment cela fonctionne. Vous pouvez envoyer des messages d'erreur ou des suggestions ici: https://github.com/aspnet/AspNetCore/issues/new/choose


Avatar
Glenn condron

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


All Articles