Obtenir le nom du site IIS pour un site Web ASP.NET

Dans mon application Web ASP.NET, je souhaiterais rechercher le nom qui lui a été atsortingbué lors de sa création dans IIS, qui est propre au serveur. Je ne m’intéressais pas au nom de domaine du site Web, mais au nom réel donné au site dans IIS.

Je dois pouvoir le faire de manière fiable pour IIS6 et 7.

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

Valeur de IIS Je voudrais lire de C # http://img252.imageshack.us/img252/6621/capturedz.png

System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(); 

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

Il vaut donc mieux utiliser la propriété HostingEnvironment.SiteName! ( msdn )

Je pense que cela devrait être la bonne réponse en ce qui concerne la documentation;)

Voici un article connexe dans la récupération de l’ID du site.

Voici un code qui pourrait fonctionner pour vous:

 using System.DirectoryServices; using System; public class IISAdmin { public static void GetWebsiteID(ssortingng websiteName) { DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc"); foreach(DirectoryEntry de in w3svc.Children) { if(de.SchemaClassName == "IIsWebServer" && de.Properties["ServerComment"][0].ToSsortingng() == websiteName) { Console.Write(de.Name); } } } public static void Main() { GetWebsiteID("Default Web Site"); } 

}

Voici le lien vers le message original .

Je ne suis pas sûr que cela fonctionne sur IIS7, mais si vous installez les composants de compatibilité IIS6 pour IIS7, cela devrait fonctionner.

Vous recherchez ServerManager ( Microsoft.Web.Administration ) qui fournit un access en lecture et en écriture au système de configuration IIS 7.0.

Parcourez Microsoft.Web.Administration.SiteCollection, obtenez une référence à votre site Web à l’aide de l’object Site et lisez 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 collection ServerManager.Sites (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.Administration fonctionne uniquement avec IIS7 .

Pour IIS6, vous pouvez utiliser à la fois ADSI et WMI, mais je vous conseille d’utiliser WMI plus rapide qu’ADSI. Si vous utilisez WMI, consultez WMI Code Creator 1.0 (gratuit / développé par Microsoft). Il va générer le code pour vous.

HTH

Vous devrez d’abord exécuter ServerManager.OpenRemote (“serverName”) lors de la connexion à un serveur distant.

Fondamentalement, faire quelque chose comme ça

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

voir aide msdn

Vous pouvez utiliser le code ci-dessous

 private ssortingng WebsiteName() { ssortingng websiteName = ssortingng.Empty; ssortingng AppPath = ssortingng.Empty; AppPath = Context.Request.ServerVariables["INSTANCE_META_PATH"]; AppPath = AppPath.Replace("/LM/", "IIS://localhost/"); DirectoryEntry root = new DirectoryEntry(AppPath); websiteName = (ssortingng)root.Properties["ServerComment"].Value; return websiteName; }