【问题标题】:Service not starting up服务未启动
【发布时间】:2020-04-27 23:08:55
【问题描述】:

这不是 this post 的重复,因为我已经尝试了那里推荐的解决方案。

我一直在尝试将我的 C#/.netCore 3.0/Kestrel 作为服务启动。

在努力让我的应用程序作为服务启动后,我按照这些instructions 创建了一个新的 exe,结果相同。

发布、添加服务并尝试从 cmd、powershell 或服务接口启动服务后,系统会提示我以下消息:

Windows 无法在本地计算机上启动 SomeWorker 服务。 错误 1053:服务没有响应启动或控制 及时提出要求。

在调查系统事件日志时,我只看到一个通用的:

由于以下错误,myWorker 服务无法启动: 服务没有及时响应启动或控制请求。

当我运行 exe/console 时,它​​可以正常启动,没有任何问题。

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging(
                options => options.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Information))
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>()
                    .Configure<EventLogSettings>(config =>
                    {
                        config.LogName = "Sample Service";
                        config.SourceName = "Sample Service Source";
                    });
            }).UseWindowsService();
}


public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

【问题讨论】:

  • 基本上,windows 服务的 OnStart 事件应该在 30 秒内完成。我不确定它在 .NET Core 世界中是否仍然适用。您在启动期间是否在做一些繁重的工作?
  • @Thangadurai。一点也不。这也是我的第一直觉。我在解决方案中的所有内容都是您在上面的代码中看到的。我什至尝试通过 regedit 增加超时时间,但仍然收到相同的结果。
  • 您是否尝试过在某处添加System.Diagnostic.Debugger.Break 调用以查看是否可以在调试会话开始时进行?
  • 我尝试了您发布的相同示例。我没有改变任何东西,但它对我有用,我可以在事件查看器中看到日志消息。您可以检查您的服务是在哪个用户帐户或服务帐户上创建/运行的吗?

标签: c# .net-core service kestrel


【解决方案1】:

问题在于 Visual Studio 未设置为将服务部署为独立的。

在项目属性中设置后,一切正常。

【讨论】:

  • 您是如何将服务设为独立的?
  • @franva 我现在不记得确切的方法了,而且我附近没有视觉工作室可以检查,但是当您右键单击,发布时,应该有一个选项来设置自包含 .net 核心发布
  • 我使用的是VS2019,点击发布后,有4个选项:Azure、Docker、文件夹和导入配置文件。我想我需要深入研究一下。谢谢:)
  • @Franva:使用文件夹,然后单击编辑按钮配置配置文件。
  • 嗨@Sebastian 我解决了我的问题。我错过了两件事。 1..UseWindowsService(),2.安装nuget包。我在 Microsoft doc 网站上都找到了。
【解决方案2】:

不确定这是否会有所帮助,我遇到了同样的问题。在我的 CreateHostBuilder 方法中归结为:

    host.ConfigureAppConfiguration(
        (hostContext, config) =>
        {
            config.SetBasePath(Directory.GetCurrentDirectory());
            config.AddJsonFile("appsettings.json", false, true);
        }
    );

事实证明,上述内容不再需要,因为调用 CreateDefaultBuilder 将设置基本路径并添加 appsettings.json。这是我的 CreateHostBuilder 现在的样子(并且工作正常):

        var host = Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureLogging(loggingBuilder =>
            {
                var configuration = new ConfigurationBuilder()
                    .AddJsonFile("appsettings.json")
                    .Build();
                var logger = new LoggerConfiguration()
                    .ReadFrom.Configuration(configuration)
                    .CreateLogger();
                loggingBuilder.AddSerilog(logger, dispose: true);
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<SrtLmcoMaximoSyncWorker>();
            });
        return host;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-21
    • 2014-01-16
    • 2015-07-25
    • 2015-05-30
    • 2020-10-06
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多