Pregunta

En ASP clásico, Server.MapPath () no siempre funciona correctamente en el evento Application_OnStart dentro de global.asa . Tengo una página ASP en & Quot; \ testfolder \ test.asp & Quot; dentro de una raíz virtual, tengo un archivo XSLT en & Quot; \ xsl \ transform.xsl " . Mi raíz virtual se encuentra en & Quot; c: \ inetpub \ wwwroot \ testapp \ & Quot; .

Uso MapPath dentro de la página ASP para obtener la ruta completa al archivo XSLT. La llamada es:

sXslPath = Server.MapPath("xsl\transform.xsl")

Algunas veces MapPath devuelve " c: \ inetpub \ wwwroot \ testapp \ xsl \ transform.xsl " como se esperaba, otras veces devuelve incorrectamente < !> quot; c: \ inetpub \ wwwroot \ testapp \ carpeta de prueba \ xsl \ transform.xsl " . La ruta incorrecta obviamente causa serios problemas.

¿Fue útil?

Solución

Estoy respondiendo mi propia pregunta aquí:

Este problema se produce porque cuando se invoca Application_OnStart , MapPath incluye incorrectamente el contexto de la página que provocó el inicio de la aplicación. Si la primera página ASP que se ejecuta cuando la aplicación aún no se inició no está en la raíz de la raíz virtual, entonces MapPath se confunde y agrega la ruta a la página ASP llamada a la ruta que devuelve .

Entonces, por ejemplo, si la página que inició la aplicación estaba en " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ test.asp " entonces MapPath agregaría incorrectamente " \ folder1 \ folder2 " en el medio de la ruta y devolvería " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ xsl \ transform.xsl "

Si su sitio web solo tiene archivos en la carpeta raíz o no usa MapPath en global.asa , nunca notará esta pequeña rareza. Sospecho que hay muchos sitios ASP Classic que a veces no pueden iniciarse correctamente debido a esto, pero sus propietarios solo hacen un rápido iisreset, sin saber qué salió mal.

El resultado de esto es que no puede usar de manera confiable MapPath en global.asa si tiene un sitio web que tiene archivos ASP en cualquier lugar que no sea solo la carpeta raíz .

Si se trata de un sitio web único, la solución más sencilla es codificar cualquier ruta que utilice en global.asa .

Si vende un producto a otras personas basado en ASP Classic, codificar los caminos no es una opción. Debe mover todo el uso de MapPath fuera del inicio de la aplicación o solucionar el problema escribiendo rutas en sus archivos ASP como parte del instalador.

Otros consejos

alternativamente usar sXslPath = Server.MapPath (" \ xsl \ transform.xsl ")

que luego asignará la ruta desde el directorio raíz

naturalmente, si está desarrollando en iis en un sistema operativo que no es un servidor, la raíz será el sitio web predeterminado, deberá recordar cambiar la implementación ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top