Accueil > .Net, C#, Développement, IIS > [C# – IIS] Récupérer les sites web sur le IIS local

[C# – IIS] Récupérer les sites web sur le IIS local

Toujours concernant [Sécurité] Chiffrer les données de configuration, j’ai un cherché à récupérer les sites web présents sur le IIS local.
Histoire de proposer une dropdown list sur mon application plutôt qu’un champ de texte (ce qui est moins susceptible d’erreurs).

Et là, ce fut quand même assez simple, bien plus que ce que je ne m’attendais.

Il est possible, via le namespace System.DirectoryServices (on doit donc référencer l’assembly du même nom), d’avoir un paquet assez incroyable d’informations sur IIS.

Je me suis limité aux sites web (et répertoires virtuels, en fait).
Voici le bout de code :

List<string> listeWebSites = new List<string>();

// Le "root" de IIS.
DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc");
foreach (DirectoryEntry de in w3svc.Children)
{
    // Ne récupérer que le "Default Web Site".
    if (de.SchemaClassName == "IIsWebServer"
        && de.Properties["ServerComment"].Value.Equals("Default Web Site"))
    {
        // Ici, comprends toute la configuration et tout plein de choses !
        foreach (DirectoryEntry child in de.Children)
        {
            // Le "ROOT" correspond uniquement aux sites web.
            if (child.Name.Equals("ROOT"))
            {
                // Pour chaque site web, donc.
                foreach (DirectoryEntry webSite in child.Children)
                {
                    listeWebSites .Add(string.Format("/{0}", webSite.Name));

                    // On peut aussi aller chercher les répertoires virtuels.
                    // Il y a peut-être un autre niveau pour les répertoires virtuels dans les répertoires virtuels
                    // mais c'est du vice, à ce niveau là...
                    foreach (DirectoryEntry webSiteVirtual in webSite.Children)
                    {
                        listeWebSites .Add(string.Format("/{0}/{1}", webSite.Name, webSiteVirtual.Name));
                    }
                }
            }
        }
    }
}

Bon, j’avoue, c’est un peu (beaucoup) à retravailler, mais c’est pour montrer l’idée.
Ça vaut le coup de jeter un oeil !

Catégories :.Net, C#, Développement, IIS
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :