2009-11-13 10 views
0

я использую подобный код в ASP.Net перечислить сайты в IIS: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

ответ

2

Я решил использовать 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

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

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

Такая же проблема. У меня есть тестовая страница aspx, используя код, который вы мне дали, за исключением Response.Write вместо Console.WriteLine, и он печатает 11 номеров. В настоящее время у нас в IIS имеется 17 веб-сайтов, а не 11. Где находятся недостающие 6? – mellamokb

0

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

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

+0

Или используя System.Web.Administration в случае IIS7 .. –