Это происходит при настройке приложения MS Azure при подключении к экземпляру SQL MI. Транспортные потоки через HCM.
Тот же код работает при предварительной настройке, когда веб-приложение напрямую запрашивает SQL-сервер 201.
"Эта проблема воспроизводима, если мы оставляем приложение в бездействии в течение нескольких минут и перезапускаем любой запрос, имеющий взаимодействие с базой данных". Как только приведенная ниже ошибка регистрируется, последующие запросы работают нормально.
Ниже регистрируется ошибка:
Properties:
SqlException.Errors = {
"System.Data.SqlClient.SqlError: A connection was successfully established with the server, but then an error occurred during the pre-login handshake.
(provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)",
}
SqlException.ClientConnectionId = "4560-9ca8-53ea0fdeca60"
SqlException.Class = "20"
SqlException.LineNumber = "0"
SqlException.Number = "10054"
SqlException.Procedure = ""
SqlException.Server =""
SqlException.State = "0"
SqlException.Source = ".Net SqlClient Data Provider"
SqlException.ErrorCode = "-2146232060"
Data:
HelpLink.ProdName = "Microsoft SQL Server"
HelpLink.EvtSrc = "MSSQLServer"
HelpLink.EvtID = "10054"
HelpLink.BaseHelpUrl = "http://go.microsoft.com/fwlink"
HelpLink.LinkId = "20476"
MS_LoggedBy = "System.Collections.Generic.List`1[System.Object]"
Stack Trace:
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
Я пытался использовать документацию, доступную в Интернете, MSDN,
а. Я начал детально регистрировать журналы System.Net для HCM. Но на уровне сокета проблем не обнаружено. Ниже исключение регистрируется в Event Viewer
HybridConnectionManager Trace: System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. --->
System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
б. Учитывая, что это может быть сбрасывание tcp-соединения, я попытался сделать пул соединений = False.
с. Проверено, удаляется ли соединение. Код написан в блоке Using и определен.