以编程方式从IIS获取站点状态,返回COM错误

时间:2012-12-05 07:15:30

标签: c# iis iis-7 configuration servermanager

我正在尝试以编程方式从IIS获取我的站点状态以查看它是否已停止,但我一直收到以下错误,

  

对象标识符不代表有效对象。 (HRESULT异常:0x800710D8)

应用程序正在使用ServerManager Site类来访问站点状态。这是代码,

//This is fine, gets back the site 
var serverManager = new Microsoft.Web.Administration.ServerManager(ConfigPath);
var site = serverManager.Sites.FirstOrDefault(x => x.Id == 5);
if (site == null) return;
var appPoolName = site.Applications["/"].ApplicationPoolName;
//error!
var state = site.State;

我已经使用静态站点进行测试以隔离问题,确保站点已启动并运行,所有配置都有效,指向有效的应用程序池...等。

如果您需要更多详细信息,请与我们联系。这是COM的事吗?

2 个答案:

答案 0 :(得分:7)

我想出了问题所在。基本上,服务器管理器有两个部分,服务器管理器的第一部分允许您从配置文件中读取站点详细信息,这是我上面所做的。问题是你只能获得文件和站点状态不属于它的信息。

服务器管理器的第二部分允许您直接连接到IIS,它通过与COM元素交互来完成此操作。所以我应该做的是:

ServerManager manager= ServerManager.OpenRemote("testserver");
var site = manager.Sites.First();
var status = site.State.ToString() ;

答案 1 :(得分:2)

我遇到了类似的问题但是我的问题是由于在ServerManager对象上调用CommitChanges来激活更改所需的延迟。我找到了我需要的答案:

ServerManager CommitChanges makes changes with a slight delay

似乎需要轮询才能获得一致的结果。类似的东西解决了我的问题(我在访问新添加的应用程序池时遇到异常):

{{1}}