JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Cómo capturar el error 'ASP 0113': Script Timed Out

El error de "tiempo de ejecución de Script superado" es el único que no se puede capturar en una página Web debido a que, si el Script tarda mucho, IIS termina su ejecución y por lo tanto, por definición, no podemos capturarlo desde nuestro propio Script.
Sin embargo existe un truco muy interesante que nos permitirá hacerlo sin problemas.

Se trata de utilizar el modo transaccional de las páginas Web ASP. En este modo, si el script falla por cualquier razón (incluyendo la de que tarde mucho en ejecutarse), el sistema revoca la transacción y llama siempre a la función OnTransactionAbort(), que debe existir en la página. Esto lo podemos aprovechar para hacer lo que queramos tras el error. Por ejemplo, el siguiente código captura el error y muestra un mensaje cuando se produce un "Script timeout":

   <%@ TRANSACTION=Required LANGUAGE="VBScript" %> 'Esto la convierte en transaccional
   <HTML>
   <BODY BGCOLOR="White" topmargin="10" leftmargin="10">
   <font size="4" face="Arial, Helvetica">
   <b>Página transaccional</b></font><br>
   <hr size="1" color="#000000">
   <p>
Este es un ejemplo de transacción abortada por exceso de tiempo </p> <p> Espera a que termine de ejecutarse el bucle infinito... </p> <% Do while 1 = 1 'Bucle infinito Loop %> </BODY> </HTML> <% ' Este es el manejador de una transacción abortada Sub OnTransactionAbort() Response.Write "<p><b>La transacción acaba de abortar porque se superó el tiempo de ejecución del Script</b>." End sub %>

El tiempo máximo de ejecución de un Script (a través de Server.ScriptTimeOut) es de 24 h, es decir de 24x60x60 = 86.400 segundos. Si se intenta ajustar un valor mayor a esta propiedad se produce un error.

 

José Manuel Alarcón
Banner

Agregar comentario