Imagen ornamental - icono de archivo .config El archivo web.config contiene toda la configuración de nuestras aplicaciones web basadas en .NET. En él se puede encontrar de todo: desde las cadenas de conexión a las bases de datos, hasta los detalles de cómo debe funcionar Internet Information Server, pasando por todo tipo de parámetros propios de la aplicación que hemos desarrollado.

A veces este archivo puede llegar a ser enorme. Además existen ciertas configuraciones que quizá nos gustaría poder gestionar de manera separada, por ejemplo porque son especialmente privadas (claves y cosas así) o quizá porque quiénes deben gestionarlas son otras personas.

Un ejemplo muy habitual son las cadenas de conexión a las bases de datos. Otro también común es la lista de reglas del módulo de re-escritura de URLs de IIS (módulo URLRewrite, equivalente al conocido .htaccess de Apache, si no lo conoces ya estás tardando).

En concreto con URL Rewrite hay ocasiones en las que el archivo puede ser kilométrico, sobre todo si utilizamos mapeos de direcciones para redirigir muchas direcciones antiguas a nuevas. Además, si la gestión de esto la lleva un webmaster o alguien de sistemas que no tiene por qué ser programador, no querremos que meta las zarpas en nuestro precioso archivo de configuración.

En estos casos lo más inteligente es extraer fuera de web.config la información que queramos tratar individualmente.

Para ello el "truco" es utilizar un útil atributo de las secciones de configuración llamado configSource. Este atributo permite indicar el nombre de un archivo en el que se almacena el contenido del nodo de configuración al que se le aplica.

Por ejemplo, consideremos un nodo de configuración de URLRewrite para mapas de direcciones, que sería algo así:

<rewriteMaps>  
  <rewriteMap name="Páginas Eliminadas">  
    <add key="/carpetaVieja/articulo.html" value="/CarpetaNueva/articulo/" />  
    <add key="/productos.php" value="/Catálogo/" />  
    ......
  </rewriteMap>  
</rewriteMaps>

Este tipo de listas puede ser larguísima, y además pueden existir varias (varios nodos de tipo rewriteMap).

Podemos llevarlas individualmente, cada una a un archivo externo, o todas juntas en un único archivo para los mapas usando este atributo.

Por ejemplo, si cambiamos todo lo anterior por esto:

<rewriteMaps configSource="mapas.config" />

ahora podremos crear un archivo en disco llamado mapas.config que contendrá los nodos necesarios para definir las re-escrituras, es decir, contendrá exactamente lo mismo que el primer fragmento de configuración:

<rewriteMaps>  
  <rewriteMap name="Páginas Eliminadas">  
    <add key="/carpetaVieja/articulo.html" value="/CarpetaNueva/articulo/" />  
    <add key="/productos.php" value="/Catálogo/" />  
    ......
  </rewriteMap>  
</rewriteMaps>

Lo que hace ASP.NET es sustituir el nodo con el atributo configSource por el contenido del archivo, lo que enla práctica deja el web.config como estaba inicialmente. pero para nosotros la cosa cambia puesto que ahora podemos gestionar esta configuración en particular de manera separada a las otras.

Podemos repetir este proceso con todas las secciones que nos interesen, reduciendo el tamaño del archivo y dándole acceso a cada cosa a quién verdaderamente lo necesita. Además de este modo podremos tener también archivos diferentes de ciertas configuraciones para desarrollo, pruebas y producción, por ejemplo, gestionándolos de manera más cómoda y segura.

Nota: un detalle importante a tener en cuenta es que cuando modificamos uno de estos archivos, al contrario que cuando modificamos el web.config, la configuración de la aplicación no se recarga de inmediato y no tienen efecto hasta que se recicle el proceso actual. Esto puede ser algo que busquemos conscientemente y nos resulte útil. Si no es el caso y queremos que entren en acción los cambios tan pronto como se produzcan deberíamos tocar el web.config o bien hacer algo que provoque el reciclado de la aplicación (por ejemplo, crear y borrar una carpeta en la raíz de la aplicación). Tenlo en cuenta.

¡Espero que te parezca útil!

¿Este post te ha ayudado?, ¿has aprendido algo nuevo? Entonces, me niego a creer que no puedas donar ni 1€ a los que necesitan algo tan básico como comer. Por cada euro que pongas tú, yo pondré otro.
¡No pases de ellos! También es tu responsabilidad.
Vamos a ayudarlos juntos