【问题标题】:.net Core service taking too long to start up.net Core 服务启动时间过长
【发布时间】:2021-01-12 06:02:04
【问题描述】:

我创建了一个 .net 核心服务。起初,我尝试按原样启动它,注入所有服务。我将应用程序发布为自包含的,但是当我尝试通过 cmd 行将其添加为服务并启动它时,我收到一个错误:

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

这将在我单击开始后大约 10 秒发生,并且进度条运行大约一半(以中等速度)。

很公平,也许我所有的服务都需要很长时间才能启动,所以我将它们从 ConfigureServices 部分中清除,作为测试运行。

现在,在我尝试启动它时添加了该服务。和以前一样,进度条开始以中等速度运行,但现在它超过了中途标记,然后开始缓慢移动。当它到达末尾时,我仍然收到上一条消息,但服务的状态(在服务管理器窗口中)现在卡在启动中。

我的程序课:

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .UseSerilog((hostingContext, loggerConfiguration) =>
                loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
            );
}

我的创业班:

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
        });
    }
}

如您所见,我没有做任何会阻止服务启动的事情,但确实有。

我做错了什么?

【问题讨论】:

  • 您是否尝试过按照docs.microsoft.com/en-us/aspnet/core/host-and-deploy/…中提到的故障排除步骤
  • @FrancoisduPlessis,我没有。现在就这样做。
  • @FrancoisduPlessis,我欠你一杯啤酒。我在浏览时注意到的第一件事是我没有指定 .UseWindowsService() 。在遵循该部分之后,它正在启动。您想将其作为答案发布,以便我接受吗?
  • 很高兴它运行起来了!您找到了答案,因此您可以自己发布答案:) 我只是向您指出了一些文档:P

标签: c# asp.net-core


【解决方案1】:

我的主机构建器没有指定 .UseWindowsService(),像这样:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .UseSerilog((hostingContext, loggerConfiguration) =>
                loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
            );

为了使用它,我必须添加对 Microsoft.Extensions.Hosting.WindowsServices 的引用

这个troubleshooter 引导我找到答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2016-07-25
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多