如何将 .NET Core 3.1 API Web 应用程序托管为 Windows 服务?

Oma*_*oup 9 c# asp.net-web-api asp.net-core asp.net-core-webapi

我有一个现有的 .NET Core 3.1 API Web 应用程序,我想将其托管为 Windows 服务。实现这一目标的最佳方法是什么?

我发现几个教程指出添加 nuget 包Microsoft.Extensions.Hosting.WindowsServices并使用该UseWindowsService()函数应该足以将其托管为 Windows 服务。这对我不起作用。我会收到错误 1053:服务未及时响应启动或控制请求。

我还读过有关工作人员服务的内容,但我不知道这如何与现有的 API 项目一起使用。

我的 Program.cs 如下所示:

 public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false)
                .Build();

            return Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseUrls(config.GetSection("Hosting:Url").Value);
                    webBuilder.UseStartup<Startup>();
                }).UseWindowsService();
        }
    }
Run Code Online (Sandbox Code Playgroud)

小智 0

我就是这样做的:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.WindowsServices;

namespace App.Name.API
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().RunAsService();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用 CreateWebHostBuilder 而不是 Create WebHostBuilder,因为我更习惯它(并且不确定两者之间的区别)。