アプリケーション内からweb.configに触れる以外に、asp.netアプリケーションをバウンスするための推奨される方法はありますか?はHttpRuntime.UnloadAppDomain()
;これを行うための好ましい方法は?もしそうなら、どこでこれをしますか?ページのアンロードまたはアプリケーションの他の場所で?
これが.NET2.0以降の場合は、「App_offline.htm」ファイルを追加し、サーバーにリクエストを送信して削除してから、サーバーに別のリクエストを送信できます。
この一連のイベントにより、app_offline.htmファイルがフォルダーに存在する限り、ASP.NETはアプリケーションを強制的にアンロードします。
スコットガスリーのブログエントリ: http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx
アプリケーション内からweb.configに触れることは悪い考えです、IMO。また、変更するファイルを用意するというアイデアは、ちょっとしたハックニー、IMOです。
ドキュメントには、 UnloadAppDomain
がアプリケーションをシャットダウンすると具体的に記載されています。
UnloadAppDomainを使用すると、未使用のアプリケーションをプログラムでシャットダウンできます。
この呼び出しは、アプリケーションのどこからでも実行できるはずです。 SecurityException
を取得する可能性があるので、ランタイムが適切なアクセス許可を与えていることを確認してください(これをライブラリに入れて呼び出しを行い、完全な信頼を与える証拠を備えたGACのライブラリ)。
このコードは私のために働きます。それを呼び出すだけで、アプリケーションをリロードできます。
System.Web.HttpRuntime.UnloadAppDomain();
このメソッドは、アプリケーションをアンロードするだけです。このメソッドをASP.NETWebボタンに配置するだけで、完全に完了です。では、アプリケーションはいつリロードされますか?実際、ボタンをクリックすると、最初にメソッドが起動し、アプリケーションがアンロードされます。さらに、ボタンをクリックしただけでWebページが更新されるため、その時点で表示されているWebページも再ロードされます。メソッドを起動した後、ページの更新プロセスにより、アプリケーションもリロードされます。
アプリに関連付けられているアプリケーションプールを停止および開始することもできます。
これを行うには、HttpRuntime.ShutdownAppDomainメソッドを呼び出します(リフレクションを使用して呼び出す必要があります)それはプライベート静的メソッドなので)
IISワーカープロセスをプログラムで再起動する方法(つまり、現在のASP.NETドメインをシャットダウンする方法) でこのメソッドを使用する方法の例については、 '再起動' REST API
実行時にアプリケーションディレクトリの下にフォルダを作成または名前変更することで、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);
}
}
}
アプリプールを停止して開始したくない場合は、いつでもリサイクルできます。