首先,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 的功能。