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