Question

J'utilise le code comme suit dans ASP.Net d'énumérer les sites dans 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);
    }
}

Cependant, je trouve que seuls les 11 premiers sites sur 16 sites sont jamais traités. Je me suis battu avec cela pendant quelques heures, et ne peut pas trouver un moyen de dépasser les 11 premiers sites dans IIS. J'ai essayé la recherche récursive, je l'ai essayé d'utiliser le DirectorySearcher en vain, j'ai essayé plusieurs fois ou énumérer en utilisant une sorte de filtre sans chance.

Toutes les idées?

Merci!

~ mellamokb

Était-ce utile?

La solution

J'ai décidé d'utiliser WMI au lieu de DirectoryServices, qui semble fonctionner parfaitement:

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

Autres conseils

Pour énumérer tous les sites sur le serveur local, vous pouvez essayer ceci:

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

Êtes-vous par hasard exécutant IIS 7? Si oui, cela pourrait expliquer le problème, puisque le métabase existe uniquement pour des raisons de compatibilité; il n'est plus le magasin principal.

Vous auriez probablement besoin d'analyser la place applicationHost.config -. Si WMI est une bonne option aussi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top