Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个服务器获取应用程序池IIS7_C#_Asp.net_.net 4.0_Frameworks - Fatal编程技术网

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

C# 从多个服务器获取应用程序池IIS7,c#,asp.net,.net-4.0,frameworks,C#,Asp.net,.net 4.0,Frameworks,我正在尝试让所有应用程序池在IIS7服务器上运行。我想在网格中显示它们,并允许用户启动、停止或回收它们。这在使用DirectoryENtry的IIS6中非常有效,但在IIS7中不起作用。我将有4或5台服务器,我将需要通过并获取所有应用程序池。这是我的密码: using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionSt

我正在尝试让所有应用程序池在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);
以下是我收到的错误:

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


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

编辑


默认情况下,在Windows 2008+
ahadmin
pachage key
HKEY_LOCAL\u MACHINE\SOFTWARE\Classes\AppID\{9fa5c497-f46d-447f-8011-05d03d7d7ddc}
只读的
适用于所有用户,但
受信任的安装程序
您必须首先获得密钥的所有权,然后向希望更改
管理员
软件包设置的用户授予
完全控制
权限。请记住,更改包属性后,将密钥权限设置恢复为原始设置。

是的,您需要打开防火墙,但不必为管理员设置固定端口。防火墙中需要三条规则。一个用于打开端口135(tcp),一个用于将本地端口设置为RPC动态端口的%SystemRoot%\System32\dllhost.exe,最后一个用于将本地端口设置为RPC Endpoint Mapper的%SystemRoot%\System32\dllhost.exe,它没有被接受的答案,只是以防万一那里的任何建议对你有帮助。它说的是哪个用户?我运行应用程序的用户?我想是这样的。否则,如果它转换为网络服务用户,我怀疑它将是计算机帐户。您将能够在远程计算机上的身份验证失败事件中查看用户详细信息(如果您已审核登录失败)。如果你在远程机器上看不到任何东西,我也看到一些与DCOM相关的东西需要允许通过防火墙。我正在浏览这些说明。但是,它看起来是灰色的。可能是集团政策。拥有注册密钥非常有效。非常感谢您的帮助。对于那些想知道…在更改COM对象后,您确实必须重新启动服务器的人,请参考。