Domanda

Io uso il codice come il seguente in ASP.Net per enumerare i siti in 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);
    }
}

Tuttavia, ritengo che solo i primi 11 siti su 16 siti sono mai processati. Ho combattuto con questo per un paio d'ore, e non riesco a trovare un modo per andare oltre i primi 11 siti in IIS. Ho provato a cercare in modo ricorsivo, Ho provato con il DirectorySearcher senza alcun risultato, ho provato enumerare più volte o utilizzando una sorta di filtro, senza alcuna fortuna.

Tutte le idee?

Grazie!

~ mellamokb

È stato utile?

Soluzione

Ho deciso di utilizzare WMI, invece di DirectoryServices, che sembra funzionare perfettamente:

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

Altri suggerimenti

Per enumerare tutti i siti sul server locale che si può provare questo:

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

Sei per caso che esegue IIS 7? Se è così, che potrebbe spiegare il problema, dal momento che esiste la metabase solo per motivi di compatibilità; non è più la fonte principale.

Si avrebbe probabilmente bisogno di analizzare applicationHost.config invece -. Anche se WMI è una buona opzione, anche

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top