从多个服务器IIS7获取应用程序池

时间:2013-05-15 18:27:16

标签: c# asp.net .net-4.0 frameworks

我正在尝试让所有应用程序池在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);

以下是我收到的错误:

  

使用检索远程组件的COM类工厂   CLSID {2B72133B-3F5B-4602-8952-803546CE3344}来自机器   由于以下错误而失败:800706ba

2 个答案:

答案 0 :(得分:2)

问题是ServerManager.OpenRemote方法在内部使用DCOM连接到远程服务器,默认情况下,DCOM使用的端口是由Windows防火墙阻止的。由于DCOM使用TCP端口135和动态范围的TCP端口1024/65335,您需要更改远程计算机上IIS Admin COM +包的设置,以限制其端点仅使用一个TCP端口而不是动态范围。您可以找到说明here

修改

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

答案 1 :(得分:1)

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