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
6 réponses
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
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 ;)
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.
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
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"))
{
}
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;
}