web-dev-qa-db-ja.com

web.configを変更する以外にasp.netアプリケーションを再起動する方法

アプリケーション内からweb.configに触れる以外に、asp.netアプリケーションをバウンスするための推奨される方法はありますか?はHttpRuntime.UnloadAppDomain();これを行うための好ましい方法は?もしそうなら、どこでこれをしますか?ページのアンロードまたはアプリケーションの他の場所で?

24
MikeJ

これが.NET2.0以降の場合は、「App_offline.htm」ファイルを追加し、サーバーにリクエストを送信して削除してから、サーバーに別のリクエストを送信できます。

この一連のイベントにより、app_offline.htmファイルがフォルダーに存在する限り、ASP.NETはアプリケーションを強制的にアンロードします。

スコットガスリーのブログエントリ: http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

12

アプリケーション内からweb.configに触れることは悪い考えです、IMO。また、変更するファイルを用意するというアイデアは、ちょっとしたハックニー、IMOです。

ドキュメントには、 UnloadAppDomain がアプリケーションをシャットダウンすると具体的に記載されています。

UnloadAppDomainを使用すると、未使用のアプリケーションをプログラムでシャットダウンできます。

この呼び出しは、アプリケーションのどこからでも実行できるはずです。 SecurityException を取得する可能性があるので、ランタイムが適切なアクセス許可を与えていることを確認してください(これをライブラリに入れて呼び出しを行い、完全な信頼を与える証拠を備えたGACのライブラリ)。

24
casperOne

このコードは私のために働きます。それを呼び出すだけで、アプリケーションをリロードできます。

System.Web.HttpRuntime.UnloadAppDomain();

続きを読む

このメソッドは、アプリケーションをアンロードするだけです。このメソッドをASP.NETWebボタンに配置するだけで、完全に完了です。では、アプリケーションはいつリロードされますか?実際、ボタンをクリックすると、最初にメソッドが起動し、アプリケーションがアンロードされます。さらに、ボタンをクリックしただけでWebページが更新されるため、その時点で表示されているWebページも再ロードされます。メソッドを起動した後、ページの更新プロセスにより、アプリケーションもリロードされます。

10
Fred

アプリに関連付けられているアプリケーションプールを停止および開始することもできます。

7
John Sheehan

これを行うには、HttpRuntime.ShutdownAppDomainメソッドを呼び出します(リフレクションを使用して呼び出す必要があります)それはプライベート静的メソッドなので)

IISワーカープロセスをプログラムで再起動する方法(つまり、現在のASP.NETドメインをシャットダウンする方法) でこのメソッドを使用する方法の例については、 '再起動' REST API

4
Dinis Cruz

実行時にアプリケーションディレクトリの下にフォルダを作成または名前変更することで、Webアプリケーションを安全に再起動できます。明らかに、アプリケーションを実行するように割り当てられたユーザーに、Webディレクトリまたはその下のサブディレクトリに対する「変更」権限を与える必要があります。

メソッドは http://www.bartlannoeye.be/blog/restarting-a-.net-web-application-without-restarting-iis で言及されています

私の場合、次のコードを使用してそれを行いました。 「書き込み可能な」サブディレクトリで機能するように変更します

protected void RestartButton_Click(object sender, EventArgs e)
{
    //restart web app (instead of iisreset)
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("restart"));
    if (dir.Exists)
    {
        Directory.Move(dir.FullName, dir.FullName + "ed");
    }
    else
    {
        DirectoryInfo dired = new DirectoryInfo(Server.MapPath("restarted"));
        if (dired.Exists)
        {
            Directory.Move(dired.FullName, dir.FullName);
        }
        else
        {
            Directory.CreateDirectory(dir.FullName);
        }
    }
}
2
user2431693

アプリプールを停止して開始したくない場合は、いつでもリサイクルできます。

0
Andrew Hare