0

首先,Docker新手。尝试在 mcr.microsoft.com/windows/servercore:1909 docker 映像上运行 .Net5 Worker 服务,并将 .Net5 和 3.1 sdks 安装到系统上。

该服务由一个 C# 程序(它是一个较大包的一部分)安装,该程序使用 advapi32.dll 的包装器来创建 Windows 服务和 SCM 并以其他方式与它一起工作。在包括主机系统在内的其他计算机上,该服务已正确安装并将继续运行。在 docker 镜像上安装后,会创建服务(以 AutomaticDelayed 启动),但会返回“服务未及时响应启动或控制请求”作为唯一错误。

无论是查看日志还是在 docker 容器上手动(从 powershell)运行服务,服务都将继续运行,直到 SCM 因超时而终止它。我已将 ServicesPipeTimeout 注册表项延长至 10 分钟,并且 SCM 在无法响应后仍会使应用程序超时。

有什么想法吗?

编辑:对使用 .UseWindowsService() 有疑问,但我们已经在使用它。这是我们所有服务都在使用的主程序。

public class Program
{
    public static void Main(string[] args)
    {
        if (!IsDebug())
            System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddSingleton<SingletonHandler>();
                services.AddHostedService<Worker>();
                services.AddHostedService<Listener>();
            })
         .ConfigureLogging((hostingContext, logging) => {
             logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
             logging.AddFile(hostingContext.Configuration.GetSection("Logging"));
         })
        .UseWindowsService();
}

编辑编辑:如果可能,我正在尝试在 Windows Server Core 映像上运行它。我不知道这是否会影响 Worker Services 的功能。

4

1 回答 1

0

您应该.UseWindowsService()在配置主机构建器时调用。该方法包含在包中Microsoft.Extensions.Hosting.WindowsServices

于 2022-01-26T09:28:37.160 回答