Error al ejecutar un proceso web largo:Tiempo de espera agotado para esta solicitud.

En una aplicación web desarrollada en asp.net  de importacion de 24000 registros en una base de datos  después de unos minutos insertando filas en la base de datos a partir de un fichero de texto convenientemente formateado nos lanzaba  la siguiente excepcion [HttpException (0x80004005): Tiempo de espera agotado para esta solicitud.]. Esta aplicacion estaba alojada en un servidor web compartido en un ISP y funcionaba correctamente en nuestros servidores de desarrollo.


Despues de un rato pensando te das cuenta de que tu aplicacion no termina de ejecutarse porque vence algun time-out
o tiempo de espera que impide acabar la operacion sobre la base de datos .Si mirais aqui la solución es aumentar el TimeOut en el web.config em el directorio raiz de la aplicación
http://msdn2.microsoft.com/en-us/library/e1f13641.aspx


Por lo tanto las lineas que tienes que escribir al principio de tu web.config para aumentar el tiempo de espera a 36000 segundos  son:
<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
  <system.web>
  <httpRuntime
            maxRequestLength=”10240″
            executionTimeout=”36000″
/>


Espero que os sea de utilidad si os da este error alguna vez en vuestra aplicacion


Saludos


 

7 comentarios en “Error al ejecutar un proceso web largo:Tiempo de espera agotado para esta solicitud.”

  1. Hola Sergio.
    Tengo una duda al respecto. Tu solución termina por especificar los timeout en el web.config, o sea, que especifica los tiempos de espera a nivel de toda la aplicación.
    Yo tengo una sola página en concreto, que es la que se encarga de realizar un largo proceso, mientras que las demás páginas tienen un funcionamiento normal.
    Entonces, no quisiera modificar el timeout para toda la aplicación, sino solamente para esa página.
    ¿Como se modifican esos valores desde código?
    Gracias.
    Un Saludo!

  2. Muy facil MonteZion,escribes en esa pagina por ejemplo en el evento Page_Load session.timeout=X donde X es el tiempo en minutos.

    SAludos
    Sergio

  3. Ojo que el Session.TimeOut es para la duración de las variables de Sesion, no tiene nada que ver con la duración de la ejecución de un comando de ejecución. Lo correcto es utilizar el executionTimeout en el web.config o en la cadena de conexión a la BD con el connectionTimeout.

    Saludos

  4. Hola,

    se puede utilizar un ThreadStart y un Thread para ejecutar un proceso largo:

    Protected Sub MiButton_Click(….)
    Dim ts as ThreadStart = New ThreadStart(AddressOf ProcesoLargo)
    Dim Trabajo as Thread = New Thread(ts)
    Trabajo.Start
    End Sub

    Sub ProcesoLargo()
    ‘Espera 10 segundos
    thread.sleep(10000)
    End Sub

    un saludo.

  5. Cierto Antonio con el correspondiente Imports System.Threading sirve para asp.net 1 y 2 pero suele haber un problema: Como le notificas que ha terminado el proceso largo?

    Una opcion que se me ocurre es enviar un email cuando haya terminado el proceso porque no vas a poder hacer un response.write.

    Se os ocurre otra solucion mejor para notificar find e proceso largo? 😉

    Saludos

  6. Hola Sergio,
    tenía problemas de timeout al ejecutar desde una web que contiene un reportviewer que ejecuta un procedimiento almacenado que tarda más de 2 minutos en ejecutarse.
    Cambiando este tiempo en mi web.config se me ha solucionado el problema.
    Ha sido muy útil.
    Muchas gracias!!!!

    Luz Marcos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *