2016-02-07 33 views
18

Microsoft.AspNet.Server.Kestrelを使用しているときにシャットダウン機能はありますか? ASP.NET Core(以前のASP.NET vNext)には明らかにStartupシーケンスがありますが、シャットダウンシーケンスとクリーンクロージャを処理する方法は記載されていません。もしIApplicationLifetimeASP.NETコアのStartup.csのKestrelシャットダウン機能

public class Startup 
{ 
    public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime) 
    { 
     applicationLifetime.ApplicationStopping.Register(OnShutdown); 
    } 

    private void OnShutdown() 
    { 
     // Do your cleanup here 
    } 
} 

IApplicationLifetimeによって提供キャンセルトークンに登録することができるASP.NETコア内

答えて

23

もキャンセルApplicationStoppedApplicationStartedのトークンならびにアプリケーションを停止するStopApplication()方法を露出されています。

+0

は、これはすべてのOSとサーバー上で動作するようになっていますか?私はそれをOSX + Kestrelで動かすことはできませんでした。 – opiethehokie

+0

これはすべてのプラットフォームで動作するはずですが、そうでない場合はバグかもしれません。 githubに関するいくつかの古い問題があります。おそらくdavidfowlの回避策をhttps://github.com/aspnet/Hosting/issues/151で試してください。それ以外の場合はhttps://github.com/aspnet/Hosting/issuesで問題を開いてみてください。 RC2の準備中です。 – Tseng

+0

@opiethehokie:https://github.com/aspnet/Hosting/issues/516に関連するかもしれません。これはLinux用ですが、SIGINTとSIGTERMは私が知る限りMacOSでも使用されています。プロセスを停止するためにMacOSが送信する信号を知るのに十分なほどのものではありません。また、dnx core 1.0を使用しているのか、完全なモノフレームワーク – Tseng

9

元の回答に加えて、コンストラクタ内でIApplicationLifetimeを配線しようとしたときにエラーが発生しました。

私がやってすることでこれを解決:

public class Startup 
{ 
    public void Configure(IApplicationBuilder app) 
    { 
     var applicationLifetime = app.ApplicationServices.GetRequiredService<IApplicationLifetime>(); 
     applicationLifetime.ApplicationStopping.Register(OnShutdown); 
    } 

    private void OnShutdown() 
    { 
     // Do your cleanup here 
    } 
} 
+1

これは、メインからウェブホストを手動で設定するときにStartupクラスを使用せずに動作します。 –

関連する問題