używamy .NET Framework 4 MVC2 EF & SQL Server 2005.SQL Wyjątek Z .net 4 i EF
Dla niektórych wniosków, a zdarza się rzadko i tylko wtedy, gdy robimy przeszukiwanie który jest realizowany z klas odwzorowywane do procedur przechowywanych wykonujących wyszukiwanie pełnotekstowe, otrzymujemy wyjątek:
[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
Jeżeli wyszukiwanie jest ponowiona po wystąpieniu błędu (z tym samym lub innym okresie), to działa regularnie.
Wszelkie sugestie doceniane
Dzięki
--MB
MYŚL 1: Wyjątkiem wydaje się zdarzyć, po nawiązaniu połączenia z serwerem SQL jest wykonany, a gdy procedura przechowywana jest wykonywany, mam rację? Jeśli tak, to czy powinienem przedłużyć limit czasu wykonywania zapytań, a nie limit czasu połączenia? Czy to możliwe, gdzie?
MYŚLAĆ 2: Być może się mylę i może to być nieczyste połączenie w basenie? W świecie Java można przekazać sql, który jest wykonywany na połączeniu, zanim aplikacja uzyska go, aby upewnić się, że połączenie jest otwarte i działa? To może być przyczyną tego. Nie byłem w stanie znaleźć takiej opcji w ciągu http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
MYŚLI 3: gubię :)
Jeśli chodzi o właściwość Connect Timeout, tak jak powiedziałem, nie sądzę, że to jest problem. MSN stwierdza: "Czas (w sekundach) oczekiwania na połączenie z serwerem przed zakończeniem próby i wygenerowaniem błędu." Wydaje się jednak, że wyjątek dzieje się NIE podczas oczekiwania na połączenie z serwerem, ale podczas oczekiwania na wykonanie zapytania. Arent te 2 rzeczy różne? Nie sądzę, że problem jest czas wykonania SPROC, ponieważ po wyjątku, gdy próbuję ponownie wyszukać na innym horyzoncie, wszystko działa dobrze. W każdym razie, bardzo dziękuję za odpowiedź, wypróbuję to. –