IIS: Cómo obtener la ruta de la metabase?
-
01-10-2019 - |
Pregunta
Estoy tratando de obtener la lista de tipos MIME conocidos a un servidor IIS ( que se puede ver y se le preguntó y respondió por mí hace 2 años ). La respuesta de copia pegado consiste en:
Usted consigue la idea. Todo el mundo está de acuerdo en que se utiliza un camino mágico IIS: // localhost / MimeMap . Y esto funciona muy bien, a excepción de los momentos en que no lo hace.
La única pista que puedo encontrar por qué se produce un error, es de un MVP de IIS, Chris Crowe, el blog :
string ServerName = "LocalHost";
string MetabasePath = "IIS://" + ServerName + "/MimeMap";
// Note: This could also be something like
// string MetabasePath = "IIS://" + ServerName + "/w3svc/1/root";
DirectoryEntry MimeMap = new DirectoryEntry(MetabasePath);
Hay dos pistas aquí:
- El llama
iis://localhost/mimemap
la Ruta de la metabase . ¿Qué me suena como que es una especie de " ruta ??em>" a un " metabase ". - Se dice que el ruta ??em> a metabase podría ser otra cosa; y da un ejemplo de lo que pudiera ser así.
Ahora mismo, y todo el planeta, están codificando el " Metabasepath " como
iis://localhost/MimeMap
Lo que debería ser realmente? Lo que debería estar haciendo el código para construir un Metabasepath válida?
Nota: Hasta ahora no recibo un error de acceso denegado, el error es el mismo cuando se tiene una Metabasepath no válido, por ejemplo, iis://localhost/SoTiredOfThis
Solución
Si está trabajando con el IIS configuración de su máquina local es decir, su código e IIS están en la misma caja, entonces es suficiente para especificar:
IIS://Localhost/mimemap
La porción IIS:
también se conoce como un moniker OLE en el lenguaje.
Si abre el archivo de la metabase IIS 6 (C:\Windows\System32\inetsrv\metabase.xml
) encontrará una gran 'burbuja' del XML. Esta es de hecho una aplanada estructura de árbol.
Caminos en la metabase están representados por atributos Location
.
El apodo IIS://localhost
asigna a la ruta Location
/LM
que es efectivamente la raíz del árbol.
El apodo IIS://localhost/MimeMap
asigna a la ruta Location
/LM/MimeMap
.
Si su código tiene acceso a la metabase en las máquinas remotas a continuación, en lugar de specifiying IIS://localhost/[path]
, se podría especificar IIS://[RemoteMachineName]/[path]
. Esto es lo que significa el comentario Chris Crowes.
IIS://localhost/MimeMap
es también la principal lista Tipo Mime. Todos los sitios heredan esta lista (la metabase de IIS depende en gran medida las propiedades heredadas).
Si quieres anular los tipos MIME de un sitio específico entonces sería modificar:
IIS://localhost/W3SVC/[iisnumber]/ROOT/MimeMap
Es útil para abrir el archivo de la metabase de IIS y tienen una excavación en torno a entender lo que está pasando bajo el capó.
Actualización:
Para responder a su pregunta acerca de por qué se puede crear un objeto DirectoryEntry
donde la ruta no es válida, DirectoryEntry
es un objeto de uso general envoltorio utilizado para enlazar con tipos diferentes de proveedores ADSI como IIS, LDAP y WinNT. Permite la creación de objetos DirectoryEntry
en los que puede no ser necesariamente un objeto coincidente en la ruta especificada. Algunas operaciones pueden requerir proveedor ADSI esta capacidad.
Hay un método estático en DirectoryEntry
llamada Exists
que se puede utilizar para probar la existencia de los objetos. Por ejemplo:
// Does Default Website exist?
if(DirectoryEntry.Exists("IIS://localhost/w3svc/1"))
{
// Do work...
}
Otros consejos
Yo estaba teniendo un problema con conseguir 0x80005000 devueltos cuando se trata de hacer esto. La causa estúpida de mi problema era que yo estaba usando IIS7 y no había instalado el soporte de compatibilidad de metabase de IIS 6.