[ASPNETMVC] Trabajar con directorios virtuales en IIS Express con ASP.NET MVC… cuidado con la physicalPath de la app raíz

imageHace 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í:

SNAGHTML7153759f

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)

SNAGHTML72e9cdf4

En nuestro proyecto se encuentra en el archivo  de proyecto .csproj, si lo vemos diria algo asi

SNAGHTML72eecede

 

Utilizando un directorio virtual

Cuando creamos o utilizamos

SNAGHTML717f5535

Se crea una nueva app en la configuración del IIS Express…

NOTA IMPORTANTE: A la misma ubicación (mirando el physicalPath)

image

Esto quiere decir que si lo ejecutamos IIS Express levanta todas las app y sus respectivos directorios virtuales de nuestro site

SNAGHTML71a0f8c4

 

¿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.

SNAGHTML71dba3d3

 

Espero que les sirva de ayuda o guía (o para conocer de mi parte otra forma de realizar esta tarea)

 

Un comentario en “[ASPNETMVC] Trabajar con directorios virtuales en IIS Express con ASP.NET MVC… cuidado con la physicalPath de la app raíz”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *