SQLDependency зависает при перезапуске SQL Server - PullRequest
1 голос
/ 15 октября 2011

У меня есть приложение, которое регистрирует несколько SQLDependencies; и события запускаются, когда происходят изменения в БД.

В нормальных условиях все работает нормально, но если мы перезапускаем SQL Server несколько раз, то новый запрос регистрации уведомления зависает.

Взял дамп и из анализа обнаружил, что SQL-поток с нижеупомянутым стеком. Кто-нибудь знает, что делает эта тема?

System.Data.SqlClient.SqlInternalConnection.OnError(System.Data.SqlClient.SqlException, Boolean)
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
System.Data.SqlClient.TdsParser.Run(System.Data.SqlClient.RunBehavior, System.Data.SqlClient.SqlCommand, System.Data.SqlClient.SqlDataReader, System.Data.SqlClient.BulkCopySimpleResultSet, System.Data.SqlClient.TdsParserStateObject)
System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean)
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(System.Data.SqlClient.ServerInfo, System.String, Boolean, System.Data.SqlClient.SqlConnection, System.Data.SqlClient.SqlConnectionString, System.Data.ProviderBase.TimeoutTimer)
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(System.Data.SqlClient.SqlConnection, System.Data.ProviderBase.TimeoutTimer, System.Data.SqlClient.SqlConnectionString, System.String, Boolean)
System.Data.SqlClient.SqlInternalConnectionTds..ctor(System.Data.ProviderBase.DbConnectionPoolIdentity, System.Data.SqlClient.SqlConnectionString, System.Object, System.String, System.Data.SqlClient.SqlConnection, Boolean)
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(System.Data.Common.DbConnectionOptions, System.Object, System.Data.ProviderBase.DbConnectionPool, System.Data.Common.DbConnection)
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionPoolGroup)
System.Data.ProviderBase.DbConnectionFactory.GetConnection(System.Data.Common.DbConnection)
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory)
System.Data.SqlClient.SqlConnection.Open()
SqlDependencyProcessDispatcher+SqlConnectionContainer.Restart(System.Object)
SqlDependencyProcessDispatcher+SqlConnectionContainer.AsyncResultCallback(System.IAsyncResult)
System.Data.SqlClient.SqlConnection.OnError(System.Data.SqlClient.SqlException, Boolean)
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
System.Data.SqlClient.SqlCommand.InternalEndExecuteReader(System.IAsyncResult, System.String)
System.Data.SqlClient.SqlCommand.EndExecuteReader(System.IAsyncResult)
SqlDependencyProcessDispatcher+SqlConnectionContainer.AsyncResultCallback(System.IAsyncResult)
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
System.Data.Common.DbAsyncResult.ExecuteCallback(System.Object)
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
System.Threading.ThreadPoolWorkQueue.Dispatch()
System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
...