我正在尝试使用服务器管理器读取站点的状态。基本上这就是我所拥有的,
var serverManager = new ServerManager(siteInstance.Server.ConfigPath);
var site = serverManager.Sites.FirstOrDefault(x => x.Id == Convert.ToInt64(siteInstance.IisIdentifier));
return site.State.ToString();
我能够毫无问题地阅读配置文件和站点详细信息。但是站点的状态要么在下面给我 COM 错误,要么给出一个不反映 IIS 中站点实际状态的状态。
The object identifier does not represent a valid object. (Exception from HRESULT: 0x800710D8)
据我了解,配置文件仅包含站点信息。它不指示哪些 IIS 服务器正在从配置中读取。那么,服务器管理器如何知道要查找哪个 IIS 来查找站点的运行状态呢?
获取站点的原因是尝试从不包含站点状态的站点配置文件中读取状态。相反,您应该做的是直接连接到IIS服务器,如下所示:
ServerManager manager= ServerManager.OpenRemote("testserver");
var site = manager.Sites.First();
var status = site.State.ToString() ;
请参阅我下面的帖子以获取完整详细信息:以编程方式从 IIS 获取站点状态,取回 COM 错误
查看此站点..我用谷歌搜索了Execption加上错误代码,我认为这应该有助于让你指向正确的方向
对象标识符不表示有效对象。(HRESULT的例外情况:0x800710D8)
如果文章不能解决问题或问题,请尝试以下操作。还可以粘贴您的.config文件的外观片段。
已检查 IIS 管理器中的应用程序池以验证您是否具有 DefaultAppPool。 即使您不使用它,IIS 有时仍然需要它来实现某些自动化。
查看 system32\inetsrv\config\applicationHost.config 或通过您的 IIS 管理用户界面。
前任:
<applicationPools>
<add name="DefaultAppPool" />
<add name="Classic .NET AppPool" managedPipelineMode="Classic" /> <applicationPoolDefaults>
<processModel identityType="ApplicationPoolIdentity" /> </applicationPoolDefaults>
</applicationPools>