c# - enable - Obtener el nombre del sitio IIS para un sitio web ASP.NET
localhost asp net (6)
Aquí hay una publicación relacionada para recuperar el Id del sitio.
Aquí hay algún código que podría funcionar para usted:
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");
}
}
Aquí está el enlace a la publicación original .
No estoy seguro de si funcionará en IIS7, pero si instala los componentes de compatibilidad de IIS6 para IIS7 debería funcionar.
En mi aplicación web ASP.NET me gustaría buscar el nombre que se le dio cuando se creó en IIS, que es exclusivo del servidor. No me interesaba el nombre de dominio del sitio web, sino el nombre real que se le daba al sitio en IIS.
Necesito poder hacerlo confiablemente para IIS6 y 7.
Para ser claros, estoy hablando del nombre de pila en IIS, no del nombre de dominio ni de la ruta del directorio virtual.
Valor de IIS Me gustaría leer de C # http://img252.imageshack.us/img252/6621/capturedz.png
Como ya mencioné @belugabob y @CarlosAg, prefiero usar System.Web.Hosting.HostingEnvironment.SiteName
lugar de System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName()
porque el método IApplicationHost.GetSiteName no está destinado a ser llamado directamente. ( msdn )
¡Así que es mejor utilizar la propiedad HostingEnvironment.SiteName! ( msdn )
Creo que esta debería ser la respuesta correcta con respecto a la documentación;)
Está buscando ServerManager ( Microsoft.Web.Administration ) que proporciona acceso de lectura y escritura al sistema de configuración de IIS 7.0.
Itere a través de Microsoft.Web.Administration.SiteCollection, obtenga una referencia de su sitio web utilizando el Objeto del sitio y lea el valor de la propiedad Nombre.
// 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
}
También puede usar LINQ para consultar la colección ServerManager.Sites (ver ejemplo a continuación)
// 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();
}
Nota : Microsoft.Web.Administration solo funciona con IIS7 .
Para IIS6 puede usar tanto ADSI como WMI para hacer esto, pero le sugiero que vaya a WMI que es más rápido que ADSI. Si usa WMI, eche un vistazo a WMI Code Creator 1.0 (Gratis / Desarrollado por Microsoft). Generará el código para ti.
HTH
Necesitará primero ServerManager.OpenRemote ("serverName") al conectarse a un servidor remoto.
Básicamente haciendo algo como esto
using (ServerManager srvMgr = ServerManager.OpenRemote("serverName"))
{
}
Puedes usar el código a continuación
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;
}
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();