我们有一个内部工具,可以枚举服务器的IIS站点和应用程序。它使用类似于此的代码:
using (var serverManager = ServerManager.OpenRemote(serverName))
{
var site = serverManager.Sites[siteName]; // This is slow
// And just starting to enumerate Applications is incredibly slow
foreach (var application in site.Applications)
{
// ...
}
}
我遇到的问题是,当访问Sites
集合时,通过VPN连接到服务器时响应时间非常慢。访问站点的应用程序甚至更慢。我的理论是,缓慢是由于网站的整个元数据集可能是通过网络发送的。但是,我只需要一部分网站数据。
我的理论是,如果我将代码切换为使用WMI查询,我将只能查询与此应用程序相关的特定字段(如SELECT Name from Site
)。不幸的是,当尝试在WMI CIM Studio中探索WMI对象时,即使对于我的本地IIS 7.5,我也不希望出现任何对象,例如Site
和Application
个对象。我正在使用root\WebAdministration
作为命名空间。
这些WMI内容是否适用于IIS 7.5?我确保打开“IIS 6 WMI兼容性”。是否有任何替代的轻量级方法来查询IIS实例的元数据?
答案 0 :(得分:0)
您可以通过WMI管理IIS 7.5,最简单的WQL查询SELECT Name from Site
将输出可用站点列表。请参阅"Managing Sites with IIS 7.0's WMI Provider"。
注意:如果您打算使用IIS6脚本,可能需要重写它们。 IIS6的大多数脚本都不能与IIS7一起使用,因为IIS 6和IIS7的WMI提供程序中的方法不同。
您可以通过以下方式启动CIM Studio:
C:\Program Files (x86)\WMI Tools
,并将您帐户的读/写访问权限设置为共享。\\hostname\WMI Tools\studio.htm
网址。如果您仍无法启动WMI Studio,请使用wbemtest
工具浏览root\WebAdministration
命名空间。