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.”.

csharp_logo

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:

¿Como intente resolver el error?

El mensaje que recibes es engañoso, obvio la  primer accion 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 hacia a traves de una consulta del DataSet del DataContext, intente cambiar esta por un procedimiento almacenado, tampoco funciono jejeje.

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

Ejecute un plan de ejecucion con la consulta para verificar que esta no fuera el problema, todo bien en esta parte.

Ejecute una traza con el SqlProfiler para tratar de entender porque se detenia 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 algun 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 codigo autogenerado de .Net y hacer esta asignacion dentro del constructor con el riesgo de perder este cambio si se regenera el  DataContext. Tambien 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 esta exenta de errores. Los errores de EF son molestos y dificiles de reparar a veces. Aun con sus detallitos sigue siendo una gran herramienta de trabajo.

Gustavo Sánchez