Frage

Ich verwende Code wie das folgende in ASP.NET, um die Websites in IIS aufzumerieren:

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);
    }
}

Ich finde jedoch, dass nur die ersten 11 von 16 Standorten jemals verarbeitet werden. Ich habe damit ein paar Stunden damit gekämpft und kann keine Möglichkeit finden, die ersten 11 Websites in IIS zu überwinden. Ich habe versucht, rekursiv zu suchen. Ich habe versucht, den Verzeichnissearcher ohne Erfolg zu verwenden.

Irgendwelche Ideen?

Vielen Dank!

~ Mellamokb

War es hilfreich?

Lösung

Ich habe beschlossen, WMI anstelle von DirectoryServices zu verwenden, was perfekt zu funktionieren scheint:

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 />");
}

Andere Tipps

Um alle Websites auf dem lokalen Server zu zählen, können Sie Folgendes versuchen:

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);
        }
    }

Laufen Sie zufällig IIS 7? In diesem Fall könnte dies das Problem erklären, da die Metabase nur aus Kompatibilitätsgründen existiert. Es ist nicht mehr der Hauptgeschäft.

Sie müssten wahrscheinlich stattdessen ApplicationHost.config analysieren - obwohl WMI auch eine gute Option ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top