Соединение устанавливается с помощью строки подключения, которая выглядит вот так:
Код: Выделить всё
"Data Source=10.131.53.7;Initial Catalog=DB_name;User ID=User;Password=pwd1234"
Все работает нормально, но через некоторое время (±30 минут) я получаю исключение, в котором говорится, что результат запроса не может быть получен из-за разрыва соединения. В сообщении об исключении упоминается имя удаленного сервера, который недоступен, и это имя пусто:
Невозможно связаться с сервером базы данных на хосте ''.
У меня такое впечатление, что возникла проблема со связью: соединение с SQL Server закрывается таким образом, что мое приложение теперь думает, что имя SQL Server имя пусто.
Кто-нибудь знает, как это возможно?
Машина по-прежнему доступна с помощью ping:
Код: Выделить всё
Prompt>ping 10.131.53.7
Pinging 10.131.53.7 with 32 bytes of data:
Reply from 10.131.53.7: bytes=32 time=29ms TTL=123
Reply from 10.131.53.7: bytes=32 time=22ms TTL=123
Reply from 10.131.53.7: bytes=32 time=28ms TTL=123
Reply from 10.131.53.7: bytes=32 time=22ms TTL=123
Ping statistics for 10.131.53.7:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 22ms, Maximum = 29ms, Average = 25ms
Для вашей информации: вот полное сообщение об исключении:
2023-11-17 08:37:53.5162 | ПродуктКлиент.Коммуникации.СерверСвязь | Исключение во время события изменения данных БД (изменений) ---
Telerik.OpenAccess.Exceptions.DataStoreException: невозможно достичь сервера базы данных на хосте ''.
Сведения об ошибке: Ошибка выполнение запроса:
Telerik.OpenAccess.RT.sql.SQLException: при получении результатов с сервера произошла ошибка транспортного уровня. (поставщик: поставщик сеансов, ошибка: 19 — физическое соединение невозможно использовать)
System.Data.SqlClient.SqlException: при получении результатов с сервера произошла ошибка транспортного уровня. (поставщик: поставщик сеансов, ошибка: 19 — физическое соединение невозможно использовать)
at System.Data.SqlClient.SqlConnection.OnError(исключение SqlException, логическое значение BreakConnection, Action'1 WrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32) ошибка)
в System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync()
в System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket()
в System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer()
в System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& значение)
в System.Data.SqlClient.TdsParser .TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet BulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean mustCacheForAlwaysEncrypted)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& Task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean defineParameterEncryptionRequest)< бр / >
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String метод, завершение TaskCompletionSource'1, тайм-аут Int32, Task& Task, Boolean& UsedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String метод)
at System.Data.SqlClient.SqlCommand.ExecuteReader(поведение CommandBehavior) , строковый метод)
в OpenAccessRuntime.CommandWrapper.ExecuteReader(поведение CommandBehavior)
в Telerik.OpenAccess.Runtime.Logging.LoggingDbCommand.ExecuteDbDataReader(поведение CommandBehavior)
в Telerik.OpenAccess.RT.Adonet2Generic.Impl.CommandImp.ExecuteReader()
в Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.executeQuery(Nullable'1 commandTimeout)
--- Конец внутренней трассировки стека исключений ---
at Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.executeQuery(Nullable'1 commandTimeout)
в OpenAccessRuntime.Relational.conn.PooledPreparedStatement.executeQuery(Nullable'1 commandTimeout)
в OpenAccessRuntime.Relational.fetch.FetchResultImp.Execute()
SQL:
ВЫБЕРИТЕ a.[voa_class] COL1, a.[AlarmId] COL2, ... FROM [Транспортные средства] WHERE a.[Id] = ?
Telerik.OpenAccess.RT.sql.SQLException: произошла ошибка транспортного уровня при получении результатов с сервера. (поставщик: поставщик сеансов, ошибка: 19 — физическое соединение невозможно использовать)
System.Data.SqlClient.SqlException: при получении результатов с сервера произошла ошибка транспортного уровня. (поставщик: поставщик сеансов, ошибка: 19 – физическое соединение невозможно использовать)
Подробнее здесь: https://stackoverflow.com/questions/775 ... sql-server