2016-03-21 6 views
8

asp.netコアのプログラムをプログラムで再起動するにはどうすればよいですか?asp.netコアアプリケーションをプログラムで再起動するには?

私はキャッシュをクリアして、アプリケーションにスタートアップを再入力させたいと思います。

+0

ただ、よりよく理解するために、なぜあなたはこれが必要なのでしょうか? –

+0

私の最も一般的なシナリオは、いくつかの管理上の視点からアプリの設定を操作することだと思います。設定は多くの場合、起動時に開始されるものです。 –

+1

私が考えることのできる別の使用方法は、新しいバージョンを公開して再起動することです –

答えて

3

開発シナリオでのみ必要な場合は、dotnet-watch(ドットネット用)またはdnx-watch(dnx用)を使用できます。

アプリケーションを本番環境で再起動したい場合は、ウォッチャーと同様のものを実装する必要があります。プロセスを強制終了して再起動するには、外部プロセスが必要です。または、あなた自身のインスタンスを起動し、その後自分自身を殺すためにあなたのアプリが必要です。残念ながら、これのための箱から何もありません。

+4

ハックですが、アプリケーションがプログラムを再起動させる設定ファイルをプログラムで変更することはできますか? –

13

更新Mirask's answerあなたがhost.Run()への呼び出しが表示されますProgram.csのでは.NETのコア用の2

より正確です。このメソッドには、System.Threading.CancellationTokenを受け入れるオーバーロードがあります。

public class Program { 

    private static CancellationTokenSource cancelTokenSource = new System.Threading.CancellationTokenSource(); 

    public static void Main(string[] args) { 

     var host = new WebHostBuilder() 
       .UseKestrel() 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

     host.Run(cancelTokenSource.Token); 
    } 

    public static void Shutdown() { 
     cancelTokenSource.Cancel(); 
    } 
} 

その後、私のコントローラで、私はProgram.Shutdown()を呼び出し、アプリケーションが死んだ数秒後にすることができます。これは私がやっているものです。 IISの背後にある場合、別の要求によってアプリケーションが自動的に起動します。

+0

これは絶対に完璧です、ありがとうございます。 IISでホストされているときにこれを処理する場合は、Microsoft.Web.Administrationへの参照を追加するか、web.configファイルを変更してIISリサイクルを騙すよりもはるかに優れています。 –

+3

小規模な更新。 .NET Core 2.0ではRun(token)メソッドがもう使用できなくなったことがわかりました。私はこれを回避するために次の行を使用しました:.RunAsync(cancellationTokenSource.Token).GetAwaiter()。GetResult(); – Schwarzie2478

+0

ありがとう、私は更新後にそれを行う方法が不思議でした。これを答えにする必要があります。 – Chet

3

.NETコア2

あなたがプログラム的にリサイクルするためにあなたのASP.NetのCore 2サイトを強制したい時があるかも知れません。 MVC/WebFormsの日でさえ、これは必ずしも推奨される方法ではありませんでしたが、残念ながら、方法があります。 ASP.Net Core 2では、IApplicationLifetimeオブジェクトの注入が可能です。このオブジェクトを使用すると、いくつかの便利なことができます。まず、Global.asaxを介して利用可能であった可能性のあるものと同様に、スタートアップ、シャットダウン、シャットダウンのイベントを登録することができます。しかし、サイトをシャットダウンする方法も公開しています(ハックなしで!)。これをあなたのサイトに注入し、それを単に呼び出す必要があります。以下は、サイトをシャットダウンするルートを持つコントローラの例です。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Mvc; 

namespace MySite.Controllers 
{ 
    public class WebServicesController : Controller 
    { 
     private IApplicationLifetime ApplicationLifetime { get; set; } 

     public WebServicesController(IApplicationLifetime appLifetime) 
     { 
      ApplicationLifetime = appLifetime; 
     } 

     public async Task ShutdownSite() 
     { 
      ApplicationLifetime.StopApplication(); 
      return "Done"; 
     } 

    } 
} 

出典:http://www.blakepell.com/asp-net-core-ability-to-restart-your-site-programatically-updated-for-2-0

関連する問題