Cómo saber si tenemos el debug=true en el Web.config

LupaMucho se ha hablado (por ejemplo aquí, aquí, aquí, aquí...) acerca de lo terrible que puede resultar para el rendimiento de nuestro sitio web el dejar la directiva debug=true en el Web.config de servidores en producción debido a la sobrecarga que implica que la compilación de las páginas se realice con el modo de depuración activo.

El problema es, primero, que hay que acordarse de cambiarlo antes de subir el sitio al servidor de producción y, segundo, que a los despistados nos suele ocurrir que tras subir una nueva versión de la aplicación podemos volver a dejarlo como estaba de forma involuntaria.

Supongo que habrá otras formas para controlarlo, pero hoy me he encontrado con una muy sencilla que nos permite averiguar en tiempo de ejecución si el sitio web está funcionando con la depuración activa o no: IsDebuggingEnabled, una propiedad de la clase HttpContext.

Así, podemos introducir un código como el siguiente en el Global.asax, que provocará la parada de la aplicación cuando intentemos iniciarla, desde un equipo remoto, si la directiva debug está establecida a true en el archivo de configuración.

public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
if (HttpContext.Current.IsDebuggingEnabled
&& !HttpContext.Current.Request.IsLocal)
{
throw new Exception("¡Depuración habilitada!");
}
}
}


Otro ejemplo menos violento podría ser la inclusión de un mensaje de alerta en el pie todas las páginas mostradas cuando se estén ejecutando en modo depuración, para lo que habría que escribir el siguiente método en la clase Global del Global.asax:

protected void Application_EndRequest(object sender, EventArgs e)
{
if (HttpContext.Current.IsDebuggingEnabled)
HttpContext.Current.Response.Write(
"<div style='background: red; color: white'>Sitio en depuración</div>"
);
}


Pero ojo, que esta propiedad sólo detecta el valor presente en el Web.config, no tiene en cuenta si a una página se le ha establecido Debug=true en sus directivas @Page, o si los ensamblados usados se compilaron en modo release o depuración.

Publicado en: www.variablenotfound.com.

Published 7/7/2008 21:33 por José M. Aguilar
Archivado en: ,,
Comparte este post:
http://geeks.ms/blogs/jmaguilar/archive/2008/07/07/c-243-mo-saber-si-tenemos-el-debug-true-en-el-web-config.aspx

Comentarios

# re: Cómo saber si tenemos el debug=true en el Web.config

Me gusta más esta:

Añadir al machine.config del servidor/es de producción la siguiente entrada:

<configuration><system.web>          <deployment retail=”true”/>    </system.web></configuration>

Con esto te olvidas de problemas ;)

Tuesday, July 8, 2008 8:29 AM por Luis Ruiz Pavón

# re: Cómo saber si tenemos el debug=true en el Web.config

Hola, Luis.

Efectivamente, si tienes acceso a ese archivo de configuración, la solución que indicas es la ideal. En otros casos debería ser responsabilidad de los administradores de los servidores el forzar el "modo producción" mediante este switch, por lo que en pura teoría ni siquiera tendríamos que preocuparnos por ello...

Un saludo y gracias por aportar.

Tuesday, July 8, 2008 8:49 AM por José M. Aguilar

# re: Cómo saber si tenemos el debug=true en el Web.config

Gracias a tí José ;)

Salu2

Tuesday, July 8, 2008 12:56 PM por Luis Ruiz Pavón

# re: Cómo saber si tenemos el debug=true en el Web.config

Hola, Espinete.

Pues sí, como dices sería otra forma, aunque entiendo que el ideal es utilizar las vías proporcionadas por el framework.

Cuando a tu pregunta, existen varias vías, como comprobar la existencia del atributo DebuggableAttribute en el ensamblado, o incluso la existencia de un depurador asociado al proceso. (Puedes leer más -en inglés- en el blog de Peter Bromberg).

Un saludo.

Tuesday, July 8, 2008 6:26 PM por José M. Aguilar

# re: Cómo saber si tenemos el debug=true en el Web.config

Hola.

Pues sí, las peticiones Ajax también provocan la ejecución del método Application_EndRequest.

La fórmula sería detectar desde el servidor si la petición es Ajax, cosa que puedes hacer mirando la propiedad HttpContext.Current.Request.ContentType; si, por ejemplo, contiene un valor como "application/json", es que se trata de una petición de este tipo.

Saludos y gracias por comentar.

Saturday, July 12, 2008 2:22 PM por José M. Aguilar