我正在尝试使用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服务器?
非常感谢!
答案 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获得)。