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

3

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

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

然而,我唯一能想到正确终止应用程序的方法是调用 exit() 函数。
IApplicationLifetime::StopApplication()

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

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

不幸的是,我无法在IIS上运行演示应用程序。当使用IBM BlueMix时,我注意到停止和停止事件从未触发,而且应用程序似乎只是停止了。

如何正确处理这个问题?这些事件不可靠吗,还是我做错了什么?

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


IBM BlueMix如何结束一个进程?它会杀死它吗? - Maxime Rouiller
1
我在我的回答中添加了一些更多的信息,如果您感兴趣的话可以看一下。基本上,ASP.NET正在使用libuv,除非他们分叉libuv(我还没有检查是否已经完成),否则他们可能会受到一些限制。 - Maxime Rouiller
1个回答

1

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

现在有两种方式可以触发事件:

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

据看来的情况, 当他们发布RTM版本时,应该会准备好一些东西。

关于进程何时被终止,如果BlueMix正在Windows上关闭,则应发送适当的WM_Close(0x0010)事件和SIGTERM,如果您在Linux / OSX系统下,则是如此。

如果BlueMix发送SIGKILL,则无法处理事件。

LIBUV更新:

如果您可以控制发送的信号,建议不要发送以下任何一个信号: SIGILL, SIGABRT, SIGFPE, SIGSEGV, SIGTERMSIGKILL。ASP.NET 5基于libuv,可能仅限于使用SIGINTSIGHUP终止应用程序,因为libuv不允许您处理SIGTERM

Cloud Foundry是Bluemix基于的平台,它在Linux上运行应用程序,并在10秒内发送SIGTERM信号,如果应用程序无法停止,则发送SIGKILL信号。 - opiethehokie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接