【问题标题】:ASP.NET 5 DNX: How to shutdown application properly?ASP.NET 5 DNX:如何正确关闭应用程序?
【发布时间】:2016-03-20 05:26:48
【问题描述】:

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

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

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

IApplicationLifetime::StopApplication()

从应用程序内部或使用 Kestrel 并在控制台中运行按 CTRL+C。

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

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

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

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

【问题讨论】:

  • IBM BlueMix 如何结束进程?它会杀死它吗?
  • 如果您感兴趣,请在我的回答中添加更多信息。基本上,ASP.NET 正在使用 libuv,除非他们分叉 libuv(尚未检查是否尚未完成),否则他们可能会限制他们正在做的事情

标签: asp.net .net ibm-cloud dnx .net-core


【解决方案1】:

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

到目前为止,甚至有两种方式可以触发。

  1. Kestrel 控制台窗口中的 CTRL-C
  2. Application 正在处理中。

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

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

如果 BlueMix 正在发送 SIGKILL,那么对于事件就无能为力了。

LIBUV 更新:

深入挖掘后,如果您对发送的信号有任何控制权,我建议您不要发送任何这些信号:SIGILLSIGABRTSIGFPESIGSEGVSIGTERM 和 @ 987654331@.

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

【讨论】:

  • Cloud Foundy 是 Bluemix 的基础,它正在 Linux 上运行应用程序,如果应用程序在 10 秒内没有停止,则发送一个 SIGTERM,然后发送一个 SIGKILL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
相关资源
最近更新 更多