.NET Core Workers como servicios de Windows

En .NET Core 3.0, presentamos un nuevo tipo de plantilla de aplicaci贸n llamada Worker Service. Esta plantilla est谩 dise帽ada para brindarle un punto de partida para escribir servicios de larga duraci贸n en .NET Core. En este tutorial, crearemos un trabajador y lo ejecutaremos como un servicio de Windows.




Trabajador de la creaci贸n


Nota En nuestras versiones preliminares, la plantilla de trabajo est谩 en el mismo men煤 que las plantillas web. Esto cambiar谩 en una versi贸n futura. Tenemos la intenci贸n de colocar la plantilla del Servicio de Trabajo directamente en el Asistente para Crear Nuevo Proyecto.


Crear un trabajador en Visual Studio


imagen


imagen


imagen


Crear un trabajador en la l铆nea de comando


Ejecute dotnet new worker


imagen


Ejecutando como un servicio de Windows


Para comenzar como un servicio de Windows, necesitamos que nuestro trabajador vea se帽ales de inicio y parada del tipo ServiceBase .NET, que conecta los sistemas de Servicio de Windows con aplicaciones .NET. Para hacer esto, necesitas:


Agregue Microsoft.Extensions.Hosting.WindowsServices NuGet Package


imagen


Agregue la llamada HostBuilder a HostBuilder en 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>(); }); } 

Este m茅todo hace algunas cosas. En primer lugar, comprueba si la aplicaci贸n realmente funciona como un servicio de Windows, si no es as铆, realiza noops, lo que hace que este m茅todo sea seguro cuando se ejecuta localmente o como un servicio de Windows.


En segundo lugar, configura su host para usar ServiceBaseLifetime . ServiceBaseLifetime trabaja con ServiceBase para ayudar a controlar la vida 煤til de su aplicaci贸n cuando se inicia como un servicio de Windows. Esto anula el ConsoleLifetime est谩ndar que maneja se帽ales como CTL + C.


Instalar trabajador


Una vez que tenemos al trabajador usando ServiceBaseLifetime debemos configurarlo:


Primero, publiquemos la aplicaci贸n. Instalaremos el Servicio de Windows en el lugar, lo que significa que el ejecutable se bloquear谩 cada vez que se inicie el servicio. La publicaci贸n es una buena manera de asegurarse de que todos los archivos necesarios para iniciar el servicio est茅n en un solo lugar y listos para instalar.


 dotnet publish -oc:\code\workerpub 

A continuaci贸n, puede usar la utilidad sc en la l铆nea de comando de administraci贸n


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

Por ejemplo:


imagen


Nota de seguridad: este comando inicia el servicio como un sistema local, que no es lo que necesita . En su lugar, debe crear una cuenta de servicio e iniciar el servicio de Windows como esta cuenta. No hablaremos de esto aqu铆, pero hay algo de documentaci贸n de ASP.NET aqu铆: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore- 2.2 2.2


Registro


El sistema de registro tiene un servicio de registro de eventos, que puede enviar mensajes de registro directamente al registro de eventos de Windows. Para ingresar al registro de eventos, puede agregar el paquete Microsoft.Extensions.Logging.EventLog y luego modificar su Program.cs :


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

Trabajo adicional


En las siguientes vistas previas, planeamos mejorar el uso de Trabajadores con servicios de Windows:


  1. Cambie el nombre de UseWindowsServiceBaseLifetime a UseWindowsService
  2. Agregue integraci贸n autom谩tica y mejorada con el registro de eventos al inicio como un servicio de Windows.

Conclusi贸n


Esperamos que pruebe nuestra nueva plantilla y desee saber c贸mo funciona. Puede enviar cualquier mensaje de error o sugerencia aqu铆: https://github.com/aspnet/AspNetCore/issues/new/choose


Avatar
Glenn condron

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


All Articles