使用Microsoft.Web.Administration获取远程应用程序池状态

时间:2015-11-15 11:35:08

标签: iis dns pool

我正在尝试使用Microsoft.Web.Administration API获取IIS 7.5应用程序池的状态,但获得例外:

System.Runtime.InteropServices.COMException was unhandled
  ErrorCode=-2147020584
  HResult=-2147020584
  Message=The object identifier does not represent a valid object. (Exception from HRESULT: 0x800710D8)
  Source=Microsoft.Web.Administration

我使用以下代码连接到不同域中的远程计算机:

string appHostConfigFile = "\\\\" + serverName + "\\c$\\windows\\system32\\inetsrv\\config\\applicationHost.config";
UNCAccess unc = new UNCAccess(@"\\" + serverName + "\\c$\\windows\\system32\\inetsrv\\config", <USER_NAME>, <DOMAIN>, <PASSWORD>);
server = new ServerManager(appHostConfigFile);

然后尝试遍历所有应用程序池:

ApplicationPoolCollection applicationPools = server.ApplicationPools;
foreach (ApplicationPool pool in applicationPools)
{
    Console.WriteLine(“Name: ” + pool.Name + “ State: “ + pool. State);
}

现在,奇怪的是我确实正确获取了Name属性(以及许多其他属性),但State属性认为是异常。 只有当我尝试连接到本地计算机(127.0.0.1)时,一切都按预期工作。

那么,谁能告诉我在这里失踪了什么?有没有其他方法可以连接到我的域外的机器上的远程IIS服务器?

非常感谢!

1 个答案:

答案 0 :(得分:1)

我已成功使用Windows Impersonation使用ServerManager访问远程IIS实例。

using (ServerManager serverManager = new ServerManager($@"\\{computerName}\c$\windows\system32\inetsrv\config\applicationHost.config"))
{
    ApplicationPoolCollection appPools = serverManager.ApplicationPools
}

这适用于IIS 8和IIS 7.5。我没有测试过其他版本。我正在使用SimpleImpersonation(可通过Nuget获得)。