2015-12-14 90 views
3

當使用DNX(核心)ASP.NET 5應用程序,配置()方法可以用來訂閱以下取消事件:ASP.NET 5 DNX:如何正確關閉應用程序?

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

不過,我可以看到ATM只有這樣才能正確地終止應用程序是從應用程序中調用

IApplicationLifetime::StopApplication() 

或使用Kestrel按CTRL + C並在控制檯中運行。

很明顯,這裏的目標是將應用程序託管爲後臺應用程序(理想的是作爲雲部署)。

不幸的是,我一直無法獲得演示應用程序在IIS上運行。 使用IBM BlueMix時,我注意到停止和停止的事件從未被觸發,顯然應用程序剛剛停止。

處理這個問題的正確方法是什麼?這些事件是不可靠的還是我做錯了?

非常感謝幫助。提前致謝!

+0

IBM BlueMix如何結束進程?它會殺死它嗎? –

+1

在我的答案中添加了一些更多的信息,如果你感興趣的話。基本上,ASP.NET使用的是libuv,除非他們fork libuv(還沒有檢查它是否已經完成),否則他們的做法可能有限。 –

回答

1

現在,無法檢測到進程正在被殺死的時間。

甚至有兩種方法即將開火。

  1. CTRL-C在隼
  2. Application的控制檯窗口被設置。

As far as it seems,當他們碰到RTM時他們會準備好一些東西。如果BlueMix正在關閉窗口,它應該發送適當的WM_Close(0x0010)事件和SIGTERM(如果您在Linux/OSX系統下)。

如果BlueMix發送SIGKILL,那麼對事件沒有任何可以完成的事情。

LIBUV更新:

挖了一下後更深的,如果你有過被髮送,我建議不要發送任何的那些信號的任何控制:SIGILLSIGABRTSIGFPESIGSEGVSIGTERMSIGKILL

ASP.NET 5基於libuv,它們可能被限制爲SIGINTSIGHUP來終止應用程序,因爲libuv不允許您處理SIGTERM

+0

Bluemix基於的Cloud Foundy正在運行該應用程序如果應用程序在10秒內沒有停止,則發送一個SIGTERM和一個SIGKILL。 – opiethehokie

相關問題