2010-07-12 66 views
18

¿Cómo obtener la ruta que generalmente se ve como %SystemDrive%\inetpub\wwwroot?¿Cómo obtener la ruta física del sitio web en el servidor IIS local? (desde una aplicación de escritorio)

Supongo que tiene algo que ver con la clase Microsoft.Web.Administration.ServerManager, pero no pude encontrar la manera.

Actualización: Estoy tratando de obtener el camino desde la aplicación independiente. No es una aplicación web ASP.NET.

+0

¿Está tratando de hacer esto desde la propia aplicación, es decir, ASP.NET, o algún tipo de aplicación independiente? – LukeH

+0

desde una aplicación independiente – Agzam

+0

es mejor que haga preguntas correctamente con toda la información y marque su actualización en negrita como lo hice en mi respuesta –

Respuesta

37

para descubrir la ruta física de un sitio web desde una aplicación independiente que puede hacer lo siguiente:

// If IIS7 
// Add reference to Microsoft.Web.Administration in 
// C:\windows\system32\inetsrv 

using Microsoft.Web.Administration; 
... 

int iisNumber = 2; 

using(ServerManager serverManager = new ServerManager()) 
{ 
    var site = serverManager.Sites.Where(s => s.Id == iisNumber).Single(); 
    var applicationRoot = 
      site.Applications.Where(a => a.Path == "/").Single(); 
    var virtualRoot = 
      applicationRoot.VirtualDirectories.Where(v => v.Path == "/").Single(); 
    Console.WriteLine(virtualRoot.PhysicalPath); 
} 

Si está utilizando IIS 6 (o la capa de compatibilidad de administración de IIS6 a IIS7)

// If IIS6 
// Add reference to System.DirectoryServices on .NET add ref tab 

using System.DirectoryServices; 
... 

int iisNumber = 2; 

string metabasePath = String.Format("IIS://Localhost/W3SVC/{0}/root", iisNumber); 
using(DirectoryEntry de = new DirectoryEntry(metabasePath)) 
{ 
    Console.WriteLine(de.Properties["Path"].Value); 
} 

Ambos ejemplos demuestran cómo descubrir la ruta a la raíz de un sitio web .

Para descubrir la ruta a un directorio virtual, necesita modificar las rutas según sea necesario.

+0

Gracias ... eso es exactamente lo que estaba buscando, supongo ... – Agzam

+1

Esto no funcionará si su "Aplicación" se está ejecutando en el SQL CLR, ya que tampoco ese Microsoft.Web .Administración.dll ni su interminable cadena de dependencias han sido probadas en SQL Server. ¿Hay alguna forma alternativa y más básica de encontrar rutas de aplicaciones web, o alguna otra DLL que tenga menos funciones? – Triynko

+0

¿cómo se obtiene, Microsoft.Web.Administration ... Tengo Win7 y no tengo esa DLL en ninguna parte de mi máquina. Microsoft.Web.Administration.dll. Encontré una Microsoft.Web.Administration.Resource.dll, pero ese no es el mismo archivo. – Switch

6

Server.MapPath

o

Request Object Paths Available

RequestObject Propiedad

PhysicalApplicationPath ruta del sistema de archivos -Returns local de la raíz virtual para esta aplicación. c: \ inetpub \ wwwroot \ tienda web

PhysicalPath -Returns la ruta del sistema de archivos local a la secuencia de comandos o la ruta actual. c: \ inetpub \ wwwroot \ tienda web \ admin \ paths.aspx

Actualizaciones

Para acceder a IIS de la aplicación ventanas pasar por este artículo: Modification of IIS Metabase in C# (para IIS 6.0,5.0)

+0

Estoy tratando de obtener la ruta desde una aplicación wpf independiente. No es una aplicación web. ¿Hay alguna forma de obtener eso usando las clases de administración de Microsoft.Web? – Agzam

+0

es mejor que haga preguntas correctamente con toda la información y marque su actualización en negrita como lo hice en mi respuesta –

+1

Microsoft.Web.Administration.ServerManager fue un poco un regalo aunque? :) – Kev

Cuestiones relacionadas