estamos utilizando .NET 4 MVC2 con EF & SQL Server 2005.Excepción SQL con .NET 4 y EF
Para algunas solicitudes, y sucede raramente, y sólo cuando estamos haciendo de búsqueda que se implementa con las clases asignada a los procedimientos almacenados que realizan la búsqueda de texto completo, obtenemos la excepción:
[SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +2030802
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +5009584
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +234
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2275
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33
System.Data.SqlClient.SqlDataReader.get_MetaData() +86
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +311
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +987
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12
System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +443
[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +479
System.Data.Objects.ObjectContext.CreateFunctionObjectResult(EntityCommand entityCommand, EntitySet entitySet, EdmType edmType, MergeOption mergeOption) +182
System.Data.Objects.ObjectContext.ExecuteFunction(String functionName, MergeOption mergeOption, ObjectParameter[] parameters) +218
System.Data.Objects.ObjectContext.ExecuteFunction(String functionName, ObjectParameter[] parameters) +53
Si la búsqueda se vuelve a intentar después de un error (con igual o diferente duración), que funciona con regularidad.
Cualquier sugerencia bien apreciados
Gracias
--MB
PENSAMIENTO 1: La excepción parece ocurrir después de que se realiza la conexión al servidor SQL, y mientras se está ejecutando el procedimiento almacenado, ¿Estoy en lo correcto? Si este es el caso, entonces necesitaría extender el tiempo de espera de la ejecución de la consulta y no el tiempo de espera de la conexión? ¿Es esto posible? ¿Dónde?
PENSAMIENTO 2: ¿Quizás estoy equivocado y esto podría ser una conexión obsoleta en la piscina? En Java World, ¿puede pasar el sql que se ejecuta en la conexión antes de que la aplicación lo obtenga para asegurarse de que la conexión esté abierta y en funcionamiento? Podría estar causando esto. No he sido capaz de localizar dicha opción dentro http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
PENSAMIENTO 3: Estoy perdido :)
En cuanto a la propiedad de Connect Timeout, como he dicho, no creo que esto sea un problema. El MSN declara: "La cantidad de tiempo (en segundos) para esperar una conexión al servidor antes de terminar el intento y generar un error". Pero la excepción parece estar sucediendo NO mientras espera la conexión al servidor, pero mientras espera la ejecución de la consulta. Arent estas 2 cosas diferentes? No creo que el problema sea el tiempo de ejecución de SPROC, porque después de la excepción, cuando intento hacer una búsqueda en otro término, todo funciona bien. De todos modos, muchas gracias por la respuesta, voy a probarlo. –