将Windows服务迁移到.NET Core

6
我有一个 Windows 服务应用程序,想要开始将其移植到 .NET Core。该应用程序长时间运行,使用套接字、自托管 MVC、定时器等。我计划将该应用程序转换为 .NET Core,以便能够在 Windows/Linux 等系统上运行。问题是,实现服务代码的正确方式是什么?例如,我需要一个 Web 主机来提供 MVC/API,还需要实际处理套接字、事件等的服务实现。我发现目前的做法是从 BackgroundService 类继承服务代码类,https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.backgroundservice?view=aspnetcore-3.0。所以问题是,BackgroundService 是否是我应该考虑的东西,还是有其他更合适的方法?谢谢。

一个非常普遍的问题,但很难具体化。我也没有在任何地方看到过对此的答案。 - Prophet Lamb
一个后续问题有一个答案,涵盖了在Windows服务中托管Asp.Net Core的情况。链接 - Frédéric
2个回答

1
另一个选项是使用Hangfire(https://www.hangfire.io/),这对于后台/定时处理非常有效,并且可以跨多个VM等工作。
在.Net Core中创建Windows服务是否不可能(或者你的问题是什么)?

微软发布了一个用于创建Windows服务的NuGet包,在你回答之前两天就已经发布了,而且在六个月前就已经发布了beta版本。所以,这已经是可以实现的,只是比较新鲜。请参阅当前的文档here - Frédéric

1

请查看 Microsoft 文档,是的,使用 BackgroundService 工作器是一种使用 .Net Core 创建一些随机 Windows 服务的通用方法。

对于您的情况,需要创建一个同时充当 Web 服务器的服务,需要额外的步骤,如稍后的问题中所回答的那样

要使用工作器,一个很好的起点是“Worker Service”项目模板。

您可以直接实现 IHostedService 接口,而不是从 BackgroundService 派生。如果这对您的用例更方便,那么这将允许您实现 StartAsyncStopAsync,而不必在单个 ExecuteAsync 方法内循环/挂起线程。

该项目需要引用 NuGet 包 Microsoft.Extensions.Hosting.WindowsServices 才能作为 Windows 服务执行。

然后在您的 Program.cs 中,添加一个调用 .UseWindowsService() 的语句。您的 Program.cs 代码应该像这样:

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<YourWorker>();
    })
    .UseWindowsService()
    .Build();

await host.RunAsync();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接