martes, 18 de enero de 2011

Anidar una aplicación ASP.NET dentro de otra

El otro día se me planteó el problema de publicar en un servidor de internet una aplicación dentro de una aplicación existente ya publicada en la raíz del mismo servidor. Es decir, imaginar que tenemos la aplicación “AplicacionRaiz” que es tan patética como 2 páginas .aspx con un diseño innovador (a través de un tema de ASP.NET) que establece el color de fondo en amarillo y el color de primer plano en azul.  Todo parece ir bien (excepto algunos usuarios que comienzan a sufrir ataques epilépticos después de navegar por nuestra aplicación) pero después tengo la necesidad de publicar “AplicacionAnidada” dentro de “AplicacionRaiz”, aun cuando “AplicacionAnidada” no tiene nada que ver con “AplicacionRaiz”.

Vemos primero lo bonita que es “AplicacionRaiz” ya publicada en nuestro servidor de internet.

clip_image001

Después nos ponemos a programar “AplicacionAnidada” y como el diseño anterior no causo mucho furor entre los usuarios, pensamos que mejor lo dejamos sin estilo y que un blanco nuclear llene de emoción nuestra vida.

clip_image002

Ahora publicamos nuestra “AplicacionAnidada” en el servidor web de producción dentro de la “AplicacionRaiz”, la cual no podemos esquivar puesto que está publicada en la raíz del web, C:\inetpub\wwwroot\.

Ahora exploramos “AplicacionAnidada” en el servidor web y vemos que pasa algo extraño.

clip_image004

Upss!, en “AplicacionAnidada” no recuerdo haber establecido ningún tema, de hecho no lo hice porque soy un pésimo diseñador, así que todo apunta a que “AplicacionAnidada” está heredando la configuración de “AplicacionRaiz”. Vamos, lo confirmo porque en la pantalla de error aparece como archivo de origen el fichero web.config de “AplicacionRaiz”. Pues bien, dicho esto tenemos una solución fantástica para decirle a “AplicacionAnidada” que NO herede nada de “AplicacionRaiz”, de hecho queremos que “AplicacionAnidada” sea una aplicación completamente distinta de “AplicacionRaiz”… de hecho lo son!

La solución pasa por decir en la aplicación padre (en nuestro caso “AplicacionRaiz”) que no propague su configuración a aplicaciones hijas, en nuestro “AplicacionAnidada”). Esto se consigue a través de la propiedad inheritInChildApplications del elemento location del fichero web.config.

El truco está en crear una sección location con path = “.” y con inheritChildApplications = “false” y meter dentro de esta localización el resto del fichero web.config (bueno todo no, porque la sección configSections y runtime tienen que estar fuera).

Por ejemplo:

<location path="." inheritInChildApplications="false">
El resto de tu fichero web.config iría aquí…
</ location>

Ahora al navegar a “AplicacionAnidada” ya volveremos a ver nuestro bonito blanco nuclear ;-)

clip_image005

Un saludo!.

 

2 comentarios:

  1. Hola buen día!
    Yo sé que ya han pasado 4 años desde la entrada, pero vengo a darle las gracias porque me ha salvado de un rollo que me tenía con la cabeza casi en el suelo!! Ahora podemos entregar el proyecto bien implementado en mi trabajo. Gracias otra vez!

    ResponderEliminar
  2. Hola. Te comento que tenias dias tratando de encontrar la solucion a este problema de anidar aplicaciones dentro de otra principal y tenia problemas a nivel de la segurida con Forms. Muchas gracias por este tutorial aun que haya pasado tanto tiempo.

    ResponderEliminar