У нас есть внутренний инструмент, который перечисляет сайты и приложения 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 в WMI CIM Studio, даже для моего локального IIS 7.5, я не обнаружил ни одного из ожидаемых объектов, таких как объекты Site
и Application
. Я использую root\WebAdministration
для пространства имен.
Работает ли что-нибудь из этого WMI для IIS 7.5? Я убедился, что включена "Совместимость с IIS 6 WMI". Есть ли какие-либо альтернативные облегченные способы запроса метаданных для экземпляра IIS?
wbemtest
здесь помогает - person bahrep   schedule 11.12.2013root\WebAdministration
, но кроме этого, я не уверен, что доступно. Я попробовал Enum Instances, используя Site в качестве имени суперкласса, но затем получил ошибку сбоя загрузки Provider. - person Jacob   schedule 11.12.2013