これはベストプラクティスの問題です。私はHttpWebRequestとHttpWebResponseを使ってURLをチェックする毎回実行する小さなC#コマンドラインプログラムを作りました。もしOKステータスで答えなければ、Process.Killを使って "w3wp"という名前のプロセスを終了します。私は通常どおり、プロセスを強制終了し、IISマネージャーを経由してアプリケーションプールをリサイクルするよりも再起動させる方が速いです。私たちが移行した後にIIS8でかなり問題なく動作していない古いソフトウェアがあります。時にはそれが失速することなく数ヶ月かかることもあり、毎週起こることもあります。私の上司は私にそれに時間を費やすことを望ましくないので、このkludge /回避策を作りました。IISが応答しなくなったときに自動的にIISを再起動する
case "alive":
Console.WriteLine("Check if website(s) respond:");
bool restartIIS = false;
List<string> checkURL;
checkURL = new List<string>();
checkURL.Add("http://www.test.se");
checkURL.Add("http://www.test.fi");
checkURL.Add("http://www.test.com");
foreach (string value in checkURL)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(value);
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
if (response.StatusDescription.Equals("OK"))
{
Console.WriteLine("Website (" + value +") is up");
}
else
{
Console.WriteLine("Website is down, restarting IIS");
restartIIS = true;
}
response.Close();
if (restartIIS == true)
{
foreach (var process in Process.GetProcessesByName("w3wp"))
{
process.Kill();
}
sendDowntimeAlert();
//function that sends me an email notifcation
}
}
break;
IISの再起動を処理する方法があるかどうかは疑問です。手動でアプリケーションプールをリサイクルすると機能する傾向があります。おそらく、プロセスを強制終了するよりも優れた方法でしょうか?とにかくこれがうまくいくかどうかはそれほど重要ですか?
Powershellは面白いと聞こえますが、私が経験したことは何もありません。基本的にはC#だけです。 – Dennis
Powershellは私が思ったよりも簡単に見えますが、オンラインで見つかったサンプルコードを使って同様のプログラムを作成しました。代わりにアプリケーションプールが再起動されます。 – Dennis