asp.net метабаза iis не возвращает все сайты - PullRequest
0 голосов
/ 13 ноября 2009

Я использую следующий код в 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

Ответы [ 3 ]

2 голосов
/ 14 ноября 2009

Я решил использовать WMI вместо DirectoryServices, который, кажется, прекрасно работает:

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 />");
}
1 голос
/ 14 ноября 2009

Чтобы перечислить все сайты на локальном сервере, вы можете попробовать это:

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);
        }
    }
0 голосов
/ 15 ноября 2009

Вы случайно запускаете IIS 7? Если это так, это может объяснить проблему, поскольку метабаза существует только по причинам совместимости; это больше не основной магазин.

Вместо этого вам, вероятно, потребуется проанализировать applicationHost.config - хотя WMI также является хорошим вариантом.

...