我们有一个内部工具可以枚举服务器的 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 实例的元数据?