2

IIS7 サーバーで実行されているすべてのアプリケーション プールを取得しようとしています。これらをグリッドに表示し、ユーザーがそれらを開始、停止、またはリサイクルできるようにしたいと考えています。これは IIS6 では DirectoryENTry を使用してうまく機能しますが、IIS7 では機能しません。4 台または 5 台のサーバーを通過し、すべてのアプリケーション プールを取得する必要があります。これが私のコードです:

using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString))
{
    myConnection.Open();

    SqlCommand cmd = new SqlCommand("SELECT ServerIP FROM Servers WHERE AppPoolIIS7='Y' AND Domain='LAN'", myConnection);

    SqlDataReader rdr = cmd.ExecuteReader();

    if (rdr.HasRows)
    {
        while (rdr.Read())
        {
            string serverIP = rdr["ServerIP"].ToString();
            ServerManager sm = new ServerManager(serverIP);
            ApplicationPoolCollection appPoolColl = sm.ApplicationPools;

            foreach (ApplicationPool appPool in appPoolColl)
            {

            }                
        }
    }
    else
    {

    }           
}

コードをステップ実行すると、最初のサーバーがデータベースから正常に取得されますが、serverIP をサーバー マネージャーに渡そうとすると、次のエラーが発生します。

ファイル名: \?\10.0.22.22 エラー: 構成ファイルを読み込めません

IP に \?\ が追加されるのはなぜですか?

編集:コードにいくつかの変更を加えましたが、別のエラーが発生しています。

ServerManager sm = ServerManager.OpenRemote(serverIP);

これが私が受け取っているエラーです:

次のエラーのため、CLSID {2B72133B-3F5B-4602-8952-803546CE3344} を持つリモート コンポーネントの COM クラス ファクトリをマシンから取得できませんでした: 800706ba

4

2 に答える 2

2

問題は、ServerManager.OpenRemoteメソッドが内部的に DCOM を使用してリモート サーバーに接続し、デフォルトで DCOM によって使用されるポートが Windows ファイアウォールによってブロックされることです。DCOM は TCP ポート 135 とダイナミック レンジの TCP ポート 1024/65335 を使用するため、リモート マシンの IIS Admin COM+ パッケージの設定を変更して、エンドポイントがダイナミック レンジではなく 1 つの TCP ポートのみを使用するように制限する必要があります。手順については、こちらを参照してください。

編集

デフォルトでは、Windows 2008 以降のahadminパッケージ キーHKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{9fa5c497-f46d-447f-8011-05d03d7d7ddc}read-onlyすべてのユーザーを対象としていますが、最初にキーの所有権を取得してから、パッケージ設定を変更するユーザーに許可をTrustedInstaller与える必要があります。パッケージのプロパティを変更した後は、キーのアクセス許可の設定を元に戻してください。full controlahadmin

于 2013-05-22T05:32:07.997 に答える
1

はい、ファイアウォールを開く必要がありますが、ahadmin の固定ポートを設定する必要はありません。ファイアウォールには 3 つのルールが必要です。1 つはポート 135 (tcp) を開くためのもので、1 つはローカル ポートが RPC 動的ポートに設定された %SystemRoot%\System32\dllhost.exe 用のもの、もう 1 つはローカル ポートが RPC エンドポイント マッパーに設定された %SystemRoot%\System32\dllhost.exe 用のものです。

于 2013-11-06T08:10:02.373 に答える