Esta características es muy poco conocida pero realmente útil.

Más pronto que tarde, una vez que tenemos en producción una aplicación Web, toca hacer mantenimiento. Ello implica muchas veces retoques sencillos que no interfieren en el trabajo normal de ésta, pero en ocasiones hay que hacer cambios gordos (por ejemplo cambiar la estructura de la base de datos o montar un módulo nuevo completo). En estos casos es conveniente detener la aplicación.

Lo típico en esta situación es colocar un archivo default.htm que sea el primero al que se dirijan los usuarios cuando entren en la aplicación. Sin embargo no sirve de mucho. Para empezar los usuarios que ya estén con la aplicación en marcha seguirán trabajando con ella como si nada. Además los ensamblados de la aplicación seguirán en memoria, las bases de datos de SQL Server 2005 Express que se hayan adjuntado dinámicamente seguirán bloqueadas y los que hayan guardado en favoritos el acceso directo a la página correcta (que no será default.htm) o que se sepan la URL adecuada seguirán teniendo acceso a la aplicación.

Otra opción es parar el servidor virtual en IIS y activar otro que responda al mismo dominio y que contenga una nota de mantenimiento. Lo malo es que esto es tedioso, necesitamos acceso a administrar el servidor (cosa que no tendremos en un hosting compartido, por ejemplo), y si el servidor virtual responde a varios dominios tendremos que tener las cabeceras de host duplicadas en el servidor virtual para mantenimiento. Vamos, que no es una opción en la mayor parte de los casos...

App_Offline.htm

Por suerte ASP.NET 2.0 ofrece un atajo sencillo para todo esto. Se trata de crear un archivo llamado App_Offline.htm y colocarlo en la raíz de nuestra aplicación.

Siempre que ASP.NET 2.0 detecte la existencia de este archivo en el raíz, cerrará la aplicación, descargará el dominio de aplicación de la memoria del servidor y desbloqueará las bases de datos adjuntadas dinámicamente. Además, cualquier petición que llegue a nuestra aplicación, sea de usuarios nuevos o de gente que ya la estuviese usando, obtendrá como respuesta el contenido de ese archivo que normalmente contendrá un mensaje de "Página en mantenimiento".

Se trata de un modo sencillo y conveniente de poner la aplicación en mantenimiento.

Consideraciones de seguridad

Claro que no todo va a ser maravilloso. Esto puede suponer un peligro de seguridad (por denegación de servicio) en el caso de aplicaciones mal programadas. Si permitimos que los usuarios suban archivos al servidor y no tenemos el tema bien controlado (algo más común de lo que nos creemos), alguien podría copiar un archivo con ese nombre al raíz y echarnos abajo la aplicación, así que mucho cuidado.

Desde mi punto de vista hubiera sido más adcuado que este modo de mantenimiento se activase mediante una entrada en el archivo web.config, que sería algo mucho más seguro.

De todos modos no hay queja :-)

Escrito por un humano, no por una IA