可以在现有的 ASPNET.Core Web 项目中使用名为 and/or 的辅助服务吗?

Can a Worker Service be called and/or used inside an existing ASPNET.Core web project?

我一直在阅读和学习 .Net Core 3.0 中提供的新 Worker Service 功能。我一直在使用 Microsoft 的 link:Background tasks with hosted services in ASP.NET Core

我不明白的是,是否可以将这些辅助服务概念引入到现有的 ASPNET Web 项目中,例如 Razor Pages 站点?还是您必须创建一个新项目,然后使用主机 OS 为此提供的任何机制将该项目部署为服务?

是的,您可以在 ASP.NET 个核心应用程序中托管任意数量的托管服务 (IHostedService)。在版本 3 中,ASP.NET Core 使用通用主机 (Host.CreateDefaultBuilder),这是在应用程序启动时托管这些托管服务的框架。事实上,ASP.NET 核心 Web 应用程序本身就是一个 IHostedService

要向您的 ASP.NET 核心应用程序添加额外的托管服务,只需在您的服务集合中注册额外的托管服务,例如在 Startup 的 ConfigureServices:

services.AddHostedService<MyHostedService>();

该服务将在应用程序运行时与 ASP.NET 核心 Web 服务器一起启动。

文档中提到的 Worker SDK 实际上是您在 ASP.NET 核心应用程序中使用的 Web SDK 的一个子集。 Microsoft.NET.Sdk.Worker 基本上是 Microsoft.NET.Sdk.Web,没有 Razor 编译和 wwwroot 文件夹等特定于 Web 的内容。它基本上设置了自动文件通配符,例如appsettings.json 并做了核心 Microsoft.NET.Sdk 没有的一些其他有用的事情。

最终这意味着,当您使用 Web SDK 时,您已经拥有了 Worker SDK 提供的一切。所以你不需要指定Worker SDK只是为了承载额外的后台服务。