Se trata de una característica que incorpora ASP.NET desde su versión 2.0 pero que sigue siendo muy poco conocida a pesar de que es 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 grandes (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 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...
Por suerte ASP.NET ofrece un atajo sencillo para todo esto. Se trata simplemente de crear un archivo llamado App_Offline.htm y colocarlo en la raíz de nuestra aplicación.
¡Ya está! Así de simple.
Siempre que ASP.NET 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. Esperamos que te resulte útil.
Nota: Autor de la imagen de portada Wesley Fryer. Imagen usada bajo licencia CC