我正在尝试以编程方式从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的事吗?
答案 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}}