我怎么知道Kestrel什么时候开始听?

我需要通知systemd我的服务已成功启动,并且启动后需要运行的任务要求服务器已经在目标Unix域套接字上进行侦听

我正在使用IWebHost::Run启动服务器,这是一个阻塞调用。 此外,我无法找到任何明显的方法来设置委托或回调事件以成功初始化。

任何人?

  • .Net Core 1.x运行IWebHost.Start()并假设服务器之后被初始化(而不是阻塞线程的Run()是安全的。 检查来源 。

     var host = new WebHostBuilder() .UseKestrel() (...) .Build(); host.Start(); 
  • 如果您使用的是.NET Core 2.0 Preview 1 (或更高版本),则源代码不同 ,同步方法不再可用,因此您应等待IWebHost.StartAsync()并假设事后已准备就绪。

您可以使用Microsoft.AspNetCore.Hosting.IApplicationLifetime :

 ///  /// Triggered when the application host has fully started and is about to wait /// for a graceful shutdown. ///  CancellationToken ApplicationStarted { get; } 

请查看此SOpost以获取配置示例。

这就是我现在最终的目标。 似乎工作正常:

 host.Start(); Log.Information("Press Ctrl+C to shut down..."); Console.CancelKeyPress += OnConsoleCancelKeyPress; var waitHandles = new WaitHandle[] { CancelTokenSource.Token.WaitHandle }; WaitHandle.WaitAll(waitHandles); Log.Information("Shutting down..."); 

然后,在Ctrl + C事件处理程序中:

 private static void OnConsoleCancelKeyPress(object sender, ConsoleCancelEventArgs e) { Log.Debug("Got Ctrl+C from console."); CancelTokenSource.Cancel(); }