2

我正在尝试让所有应用程序池在 IIS7 服务器上运行。我想在网格中显示这些并允许用户启动、停止或回收它们。这在使用 DirectoryENtry 的 IIS6 中效果很好,但不适用于 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+ 包的设置,以限制其端点仅使用一个 TCP 端口而不是动态范围。您可以在此处找到说明。

编辑

默认情况下,Windows 2008+ahadmin包密钥HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{9fa5c497-f46d-447f-8011-05d03d7d7ddc}适用read-only于所有用户,但TrustedInstaller您必须首先获得密钥的所有权,然后将full control权限授予想要更改ahadmin包设置的用户。请记住,更改包属性后,将密钥权限设置恢复为原始设置。

于 2013-05-22T05:32:07.997 回答
1

是的,您需要打开防火墙,但您不必为 ahadmin 设置固定端口。您需要防火墙中的三个规则。一个打开端口 135 (tcp),一个用于 %SystemRoot%\System32\dllhost.exe,本地端口设置为 RPC 动态端口,最后一个用于 %SystemRoot%\System32\dllhost.exe,本地端口设置为 RPC Endpoint Mapper

于 2013-11-06T08:10:02.373 回答