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



Crear un trabajador en la l铆nea de comando
Ejecute dotnet new worker

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

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:

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:
- Cambie el nombre de UseWindowsServiceBaseLifetime a UseWindowsService
- 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
