【问题标题】:Get Application Pools from multiple servers IIS7从多个服务器 IIS7 获取应用程序池
【发布时间】:2013-05-10 11:04:02
【问题描述】:

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

【问题讨论】:

  • 抱歉,如果您已经看过这个similar question,它没有得到公认的答案,但以防万一那里的任何建议对您有所帮助。
  • 指的是哪个用户?我运行应用程序的用户是谁?
  • 我想是的。否则,我怀疑如果它转换为网络服务用户,它将是计算机帐户。您将能够在远程计算机上的身份验证失败事件中看到用户详细信息(如果您已审核登录失败)。如果您在远程计算机上看不到任何内容,我也确实看到了需要允许通过防火墙的与 DCOM 相关的某些内容。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    编辑

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

    【讨论】:

    • 我正在浏览这些说明。但是,它看起来是灰色的。可能是组策略。
    • 获得 reg 密钥的所有权效果很好。非常感谢您的所有帮助。
    • 对于那些想知道的人仅供参考......您必须在更改 COM 对象后重新启动服务器。
    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2011-01-16
    • 2012-08-31
    • 1970-01-01
    • 2011-11-28
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多