1

プログラムでこれを行う方法について、ここのすべてのスレッドを読みましたが、機能させることができません。私のコードがどのように機能するかについての少しの背景。

サイトにログインし、App Pool モニターを選択します。探しているサーバーを選択できるドロップダウンがあります。そのサーバーからアプリ プールを取得してグリッドに表示するストアド プロシージャがあります。次に、テストしている次のコードがあります。

while (rdr.Read())
{
     string appPool = rdr["AppPoolName"].ToString();
     string permission = rdr["Permission"].ToString();
     string serverIP = rdr["ServerIP"].ToString();

     if (permission == "E")
     {
          lblErrorStart.Visible = false;

          using (var serverManager = ServerManager.OpenRemote(serverIP))
          {
               ApplicationPool poolName = serverManager.ApplicationPools[appPool];
               poolName.Stop();
               lblSuccess.Visible = true;
          }
     }

     else
     {
          lblErrorStart.Visible = true;
     }
}

私が作成したリーダーは、AppPoolName、ServerIP、および SQL からのアクセス許可をプールします。

IIS6 に DirectoryEntry を使用していますが、うまく機能しますが、IIS7 では機能しません。

using (DirectoryEntry w3svc = new DirectoryEntry(string.Format("IIS://" + serverIP + "/W3SVC/AppPools/" + appPool)))
{
     w3svc.Invoke("Recycle", null);
     lblSuccess.Visible = true;
}

どんな助けでも大歓迎です。

編集: ディレクトリ サービスで発生する例外は System.Runtime.InteropServices.COMException です

4

1 に答える 1

2

それが機能していないことをどのように知っていますか?アプリ プールがリサイクルされたかどうかは、どうすればわかりますか? 数か月前にこの問題が発生し、本当にリサイクルされているかどうかを確認する方法を見つけようとしました. IIS でトレースをオンにしましたが、メッセージがログに記録されませんでした。次に、ダミーのサービスと、そのサービスに 0.5 秒ごとに ping を送信するコンソール アプリを作成しました。次に、サービスをホストしていた AppPool をリサイクルしましたが、奇妙なことに、ping の応答に遅延が見られました。これは、実際にリサイクルされたことを意味します。

に変更w3svc.Invoke("Recycle", null);してみてくださいw3svc.Invoke("Stop", null);。これで AppPool が停止した場合、問題なく動作することはほぼ確実ですRecycleRecycle操作を呼び出しても はブロックされないことに注意してください。そのため、コードがリサイクル後に AppPool を起動して実行することに依存している場合は、続行する前にその状態を確認する必要があります。

編集:

これを試してみてください:

Windows Featuresウィンドウで、IIS 6 Management Compatibility が有効になっていることを確認します。

ここに画像の説明を入力

[スタート] メニューを開き、「services」と入力して Enter キーを押します。が実行されていることを確認IIS Admin Serviceします。ここで、コマンドを呼び出して、機能するかどうかを確認してください。

于 2013-08-20T17:01:01.987 に答える