Obtenez le nom du site pour un ASP.NET site web

dans mon ASP.NET application web j'aimerais chercher le nom qui lui a été donné quand il a été créé dans IIS, qui est unique au serveur. Je ne suis pas intéressé par le nom de domaine pour le site Web mais le nom réel donné au site dans IIS.

je dois être capable de le faire de manière fiable pour IIS6 et 7.

pour être clair, je parle du prénom 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

50
demandé sur Søren Spelling Lund 2009-10-31 19:04:19

6 réponses

System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
55
répondu Mehdi Golchin 2009-10-31 18:03:48

comme @belugabob et @CarlosAg l'ont déjà mentionné, je préférerais utiliser System.Web.Hosting.HostingEnvironment.SiteName au lieu de System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName() parce que je ne demande plus.La méthode GetSiteName n'est pas destinée à être appelée directement! ( msdn )

donc vous êtes mieux en utilisant L'environnement D'hébergement.La propriété SiteName! ( msdn )

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

12
répondu khlr 2013-06-26 17:55:54

Voici une 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 que cela fonctionnera sur IIS7, mais si vous installez les composants de compatibilité IIS6 pour IIS7, cela devrait fonctionner.

10
répondu Chuck Conway 2017-05-23 11:33:24

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

itérer par Microsoft.Web.Administration.SiteCollection, obtenez une référence à votre site Web en utilisant L'objet Site et lisez la valeur de la propriété Nom.

// 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 le ServerManager.Collection de 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(); 
        } 

Note : Microsoft.Web.L'Administration travaille seulement 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 vous utilisez WMI, jetez un oeil à créateur de Code WMI 1.0 (libre / développé par Microsoft). Il va générer le code pour vous.

HTH

9
répondu ntze 2009-11-01 14:05:00

vous devrez faire le ServerManager.OpenRemote ("serverName") en premier lors de la connexion à un serveur distant.

En Gros, faire quelque chose comme ça

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

            }

voir aide msdn

0
répondu pungggi 2011-04-06 08:52:54

vous pouvez utiliser le code ci-dessous

private string WebsiteName()
{
    string websiteName = string.Empty;
    string AppPath = string.Empty;
    AppPath = Context.Request.ServerVariables["INSTANCE_META_PATH"];
    AppPath = AppPath.Replace("/LM/", "IIS://localhost/");
    DirectoryEntry root = new DirectoryEntry(AppPath);
    websiteName = (string)root.Properties["ServerComment"].Value;
    return websiteName;
}
0
répondu Sachin Bhale 2014-11-03 17:47:56