asp.net iis metabase не возвращает все сайты
-
20-09-2019 - |
Вопрос
Я использую код, как следующее в ASP.NET, чтобы перечислить веб -сайты в IIS:
string metabasePath = "IIS://localhost/W3SVC";
DirectoryEntry service = new DirectoryEntry(metabasePath);
service.RefreshCache();
string className = service.SchemaClassName.ToString();
if (className.EndsWith("Service"))
{
DirectoryEntries sites = service.Children;
foreach (DirectoryEntry site in sites)
{
ProcessSite(site);
}
}
Тем не менее, я обнаружил, что только первые 11 сайтов из 16 сайтов когда -либо обрабатывались. Я сражался с этим в течение нескольких часов и не могу найти способ преодолеть первые 11 сайтов в IIS. Я пробовал поиск рекурсивно, я пытался использовать DirectorySearcher, но я пробовал перечислять несколько раз или использовать какой -то фильтр без какой -либо удачи.
Любые идеи?
Спасибо!
~ mellamokb
Решение
Я решил использовать WMI вместо каталогов, который, кажется, работает отлично:
ManagementScope oms = new ManagementScope(@"\\.\root\MicrosoftIISv2");
oms.Connect();
ObjectQuery oQuery = new ObjectQuery("select * from IISWebServerSetting");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oms, oQuery);
foreach (ManagementObject oreturn in oSearcher.Get())
{
Response.Write(oreturn["ServerComment"] + " (" + oreturn["Name"] + ")<br />");
}
Другие советы
Чтобы перечислить все сайты на локальном сервере, вы можете попробовать это:
class Program
{
static void Main(string[] args)
{
var iis = new DirectoryEntry("IIS://localhost/W3SVC");
var sites = (from DirectoryEntry entry in iis.Children
where entry.SchemaClassName == "IIsWebServer"
select entry).ToArray();
foreach (var site in sites)
{
Console.WriteLine(site.Name);
}
}
Вы случайно бежите IIS 7? Если это так, это может объяснить проблему, поскольку метабаза существует только по причинам совместимости; Это больше не основной магазин.
Вместо этого вам понадобится анализировать ApplicationHost.config - хотя WMI тоже является хорошим вариантом.