Hace unos días con Marcos, un compañero de trabajo, dimos con un inconveniente cuando tuvimos que trabajar con una aplicaciones ASP.NET MVC en directorio virtuales en el IIS Express; El inconveniente… era que cuando se cambia a que utilice un directorio virtual la app el IIS Express mantiene la configuración de la misma aplicación en el raíz, haciendo que las peticiones se respondan de ambas aplicaciones la raíz apuntando al mismo directorio que la nueva app con el directorio virtual… Si a alguno le paso y conoce como solucionarlo de otra forma me avisa!… Por lo pronto la solución rápida fue apuntar el la app raíz a otro directorio (directamente en la configuración del IIS Express, archivo applicationhost.config)
Paso a paso: Creando el proyecto y utilizando IIS Express
Al crear una aplicación ASP.NET MVC con el VS2012 Update 3 (lo digo por las dudas) por default la configuración para el servidor web es así:
Dicha configuración se encuentra en el archivo applicationhost.config
Que siempre se encuentra en alguna de estas ubicaciones:
%userprofile%documentsiisexpressconfigapplicationhost.config %userprofile%my documentsiisexpressconfigapplicationhost.config
Dicha configuracion es algo asi (veras que por site tenemos un nombre para manipular el mismo y un id)
En nuestro proyecto se encuentra en el archivo de proyecto .csproj, si lo vemos diria algo asi
Utilizando un directorio virtual
Cuando creamos o utilizamos
Se crea una nueva app en la configuración del IIS Express…
NOTA IMPORTANTE: A la misma ubicación (mirando el physicalPath)
Esto quiere decir que si lo ejecutamos IIS Express levanta todas las app y sus respectivos directorios virtuales de nuestro site
¿El problema de tener así en la maquina de desarrollo?
O sea, va seguir respondiendo a las peticiones de ambas app.
Por ejemplo para acceder a las imágenes ambas aplicaciones
- http://localhost:58876/images/yoda.jpg
- http://localhost:58876/app1/images/yoda.jpg
Mapeando correctamente el path de los recursos al raíz de la aplicación web (operador ~)
NOTA: Si estas utilizando en MVC el motor de vista Razor (o el motor Webforms con ASP.NET Web Pages 2.0) con simplemente deberías utilizar el operador ~ (raiz de la app) mas info aquí
<img src="~/images/yoda.jpg" alt="Yoda" />
Si estas utilizando el motor ASP.NET Web Pages 1 tendrias que utilizar la funcion @Href
<img src="@Href("~/images")/yoda.jpg" alt="Yoda" />
(esto sigue funcionando, solo que ahora no hace falta la funcion solo el ~)
Bueno y aquí el problema es cuando no utilizamos esto o algunas llamadas se realizaron sin tener en cuenta el directorio virtual.
Cuando estamos en desarrollando con IIS Express esta aplicación web en su directorio virtual… algunas peticiones ajax, llamadas a imágenes, estilos seguían funcionando y cuando desplegamos en el servidor ya en producción con solamente en el directorio virtual obviamente no iban a funcionar.
¿Entonces? Solución “express”…
Simplemente cambiamos el physicalPath del directorio raíz… así las peticiones de la aplicación raíz no deben funcionar.
Espero que les sirva de ayuda o guía (o para conocer de mi parte otra forma de realizar esta tarea)
Hola, No era mejor eliminar el directorio virtual ya existente.