How to: Resolver error «Se agotó el tiempo de espera de ejecución. El período de tiempo de espera transcurrió antes de la finalización de la operación o el servidor no responde.».

En este post voy a explicar como resuelvo el error:«Se agotó el tiempo de espera de ejecución. El período de tiempo de espera transcurrió antes de la finalización de la operación o el servidor no responde.». de EntityFramework (EF).

Contexto del error.

Recientemente, se migró un servidor de Sql Express 2008 R2 a Sql Standard 2012, no hubo problema alguno con las bases de datos. El problema empezó con una consulta a una tabla, de dicha tabla se consultan varios esquemas Xsd de un campo Varbinary. En el momento en que el sistema tenía que leer de esta tabla fallaba. El error fue el siguiente:

¿Cómo intente resolver el error?

El mensaje que recibes es engañoso, obvio la primera acción fue ajustar los timeouts de la cadena de conexión y verificar el valor de timeout del servidor, no funciono.

Instale todos los parches y actualizaciones disponibles de Sql y .Net.

La consulta de los registros se hacía a través de una consulta del DataSet del DataContext, intente cambiar está por un procedimiento almacenado, tampoco funciono.

Consulte el visor de eventos del servidor en busca de algún error no esperado, no hubo nada relevante.

Ejecute un plan de ejecución con la consulta para comprobar que esta no fuera el problema, todo bien en esta parte.

Ejecute una traza con el SqlProfiler para tratar de entender por qué se detenía este query, me lleve la sorpresa de que la consulta funcionaba bien. El problema no estaba en el servidor sino en EF.

Resolviendo el error.

EF por algún motivo ignora el timeout de la cadena de conexión, en ocasiones, hay que asignar un valor al timeout luego de instanciar el DataContext. Puedes modificar el código autogenerado de .Net y hacer esta asignación dentro del constructor con el riesgo de perder este cambio si se regenera el  DataContext. También puedes asignar el timeout del modo en el que lo hice yo:

Conclusiones.

EF es una gran herramienta que te ahorra mucho tiempo, desgraciadamente no está exenta de errores. Los errores de EF son molestos y difíciles de reparar a veces. Aun con sus detallitos sigue siendo una gran herramienta de trabajo.

Gustavo Sánchez
Últimas entradas de Gustavo Sánchez (ver todo)

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.