58 votes

Obtenir IIS nom de site à partir d'un ASP.NET site web

Dans mon ASP.NET web application que je voudrais pour rechercher le nom qu'il a donné quand il a été créé dans IIS, qui est unique sur le serveur. Je n'avais pas intéressé par le nom de domaine pour le site web, mais le nom donné au site dans IIS.

J'ai besoin d'être en mesure de le faire de manière fiable pour IIS6 et 7.

Pour être clair, je parle au nom donné dans IIS, pas le nom de domaine et non pas le chemin du répertoire virtuel.

Value from IIS I'd like to read from C#

68voto

Mehdi Golchin Points 5578
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();

21voto

khlr Points 243

Comme @belugabob et @CarlosAg déjà mentionné, je préfère utiliser System.Web.Hosting.HostingEnvironment.SiteName au lieu de System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName() parce que IApplicationHost.GetSiteName méthode n'est pas destinée à être appelée directement! (msdn)

Donc, vous êtes mieux d'utiliser HostingEnvironment.SiteName propriété! (msdn)

Je pense que cela devrait être la réponse correcte à l'égard de la documentation ;)

12voto

Chuck Conway Points 10293

Voici un poste dans la récupération de l'Id de site.

Voici un code qui pourrait fonctionner pour vous:

using System.DirectoryServices;
using System;

public class IISAdmin
{
   public static void GetWebsiteID(string websiteName)
   {
      DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc");

     foreach(DirectoryEntry de in w3svc.Children)
     {
        if(de.SchemaClassName == "IIsWebServer" && de.Properties["ServerComment"][0].ToString() == websiteName)
        {
           Console.Write(de.Name);
        }

     }

  }
  public static void Main()
  {
     GetWebsiteID("Default Web Site");
  }

}

Voici le lien vers le post original.

Je ne suis pas sûr si cela va fonctionner sur IIS7, mais si vous installez le serveur IIS6 compatibilité des composants pour IIS7, il doit travailler.

9voto

ntze Points 96

Vous êtes à la recherche pour ServerManager (Microsoft.Web.De l'Administration) qui fournit un accès en lecture et écriture à la configuration d'IIS 7.0 système.

Itérer sur Microsoft.Web.De l'Administration.SiteCollection, obtenir une référence à votre site web à l'aide de l'Objet du Site et de lire la valeur de la propriété Name.

// Snippet        
using (ServerManager serverManager = new ServerManager()) { 

var sites = serverManager.Sites; 
foreach (Site site in sites) { 
         Console.WriteLine(site.Name); // This will return the WebSite name
}

Vous pouvez également utiliser LINQ pour interroger la ServerManager.Les Sites de collecte (voir exemple ci-dessous)

// Start all stopped WebSites using the power of Linq :)
var sites = (from site in serverManager.Sites 
            where site.State == ObjectState.Stopped 
            orderby site.Name 
            select site); 

        foreach (Site site in sites) { 
            site.Start(); 
        }

Remarque : Microsoft.Web.L'Administration fonctionne uniquement avec IIS7.

Pour IIS6 vous pouvez utiliser ADSI et WMI pour ce faire, mais je vous suggère d'aller pour WMI qui est plus rapide que l'outil ADSI. Si à l'aide de WMI, jetez un oeil au Code WMI Creator 1.0 (Gratuit / Développé par Microsoft). Il va générer le code pour vous.

HTH

0voto

pungggi Points 509

Vous aurez besoin de faire la ServerManager.OpenRemote("nom du serveur") d'abord lors de la connexion à un serveur distant.

Essentiellement faire quelque chose comme ceci

            using (ServerManager srvMgr = ServerManager.OpenRemote("serverName"))
            {

            }

voir l'aide msdn

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X