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

StackOverflow https://stackoverflow.com/questions/407713

  •  03-07-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

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

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

Scott Guthrieのブログエントリ: http://weblogs.asp.net/scottgu/archive/2005 /10/06/426755.aspx

他のヒント

アプリケーション内からweb.configをタッチするのは悪い考えです、IMO。また、変更するファイルを作成するという考えは、ちょっとしたハックニー、IMOです。

ドキュメントには、 UnloadAppDomain はアプリケーションをシャットダウンします:

  

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

この呼び出しは、アプリケーションのどこでも行うことができます。気を付けてください、 SecurityException 、ランタイムが適切な許可を与えていることを確認してください(これをライブラリに入れて呼び出しを行い、ライブラリを完全な信頼を与える証拠とともにGACに設定します)。

このコードは私にとっては機能します。呼び出すだけでアプリケーションをリロードできます。

System.Web.HttpRuntime.UnloadAppDomain();

続きを読む

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

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

HttpRuntime.ShutdownAppDomain メソッドを呼び出すことでこれを実行できます(プライベート静的メソッドであるため、リフレクションを使用して呼び出す必要があります)

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

実行時にアプリケーションディレクトリの下にフォルダを作成または名前変更することにより、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);
        }
    }
}

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top