web-dev-qa-db-fra.com

Obtenez IIS nom du site pour un site Web ASP.NET

Dans mon application Web ASP.NET, je voudrais rechercher le nom qui lui a été donné lors de sa création dans IIS, qui est unique 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 non du chemin du répertoire virtuel.

Valeur de IIS J'aimerais lire à partir de C # http://img252.imageshack.us/img252/6621/capturedz.png

52
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
57
Mehdi Golchin

Comme @belugabob et @CarlosAg l'ont déjà mentionné, je préfère utiliser System.Web.Hosting.HostingEnvironment.SiteName Au lieu 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;)

18
khlr

Voici un article connexe pour récupérer l'identifiant du site.

Voici du code qui pourrait vous convenir:

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 message d'origine .

Je ne sais pas si cela fonctionnera sur IIS7, mais si vous installez les composants de compatibilité IIS6 pour IIS7, cela devrait fonctionner.

11
Chuck Conway

Vous recherchez ServerManager ( Microsoft.Web.Administration) qui fournit la lecture et accès 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'objet 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 l'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 pour ce faire, mais je vous suggère d'opter pour WMI qui est plus rapide que ADSI. Si vous utilisez WMI, consultez WMI Code Creator 1. (gratuit/développé par Microsoft). Il générera le code pour vous.

HTH

9
ntze

Vous devrez d'abord effectuer ServerManager.OpenRemote ("serverName") lors de la connexion à un serveur distant.

Fondamentalement, faire quelque chose comme ça

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

            }

voir l'aide de msdn

0
pungggi

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
Sachin Bhale