ASP.NET 5 DNX:如何正确关闭应用程序?

ASP.NET 5 DNX: How to shutdown application properly?

使用 DNX(core) ASP.NET 5 应用程序时,Configure() 方法可用于订阅以下取消事件:

IApplicationLifetime::ApplicationStarted
IApplicationLifetime::ApplicationStopping
IApplicationLifetime::ApplicationStopped

但是,我可以看到 ATM 正确终止应用程序的唯一方法是调用

IApplicationLifetime::StopApplication()

在应用程序中或在控制台中使用 Kestrel 和 运行ning 按 CTRL+C。

显然这里的目标是将应用程序托管为后台应用程序(理想情况下作为云部署)。

遗憾的是,我无法在 IIS 上获得 运行 的演示应用程序。 使用 IBM BlueMix 时,我注意到从未触发停止和停止事件,显然应用程序刚刚停止。

处理这个问题的正确方法是什么?这些事件是不可靠还是我做错了什么?

非常感谢您的帮助。提前致谢!

目前无法检测进程何时被终止。

目前 even 有两种触发方式。

  1. Kestrel
  2. 控制台 window 中的 CTRL-C
  3. 正在处理 Application

As far as it seems,他们会在点击 RTM 时准备好东西。

至于进程何时被终止,如果 BlueMix 在 windows 关闭,它应该发送正确的 WM_Close (0x0010) 事件和 SIGTERM 如果您处于 Linux/OSX系统。

如果 BlueMix 正在发送 SIGKILL,则无法对事件执行任何操作。

LIBUV 更新:

深入挖掘后,如果您可以控制发送的信号,我建议您不要发送任何信号:SIGILLSIGABRTSIGFPESIGSEGVSIGTERMSIGKILL.

ASP.NET 5 基于 libuv,它们可能限于 SIGINTSIGHUP 以终止应用程序,因为 libuv 不允许您处理 SIGTERM