У нас есть служба WCF, размещенная в IIS, работающая на сервере. Служба подключается к экземпляру SQL Server, запущенному на другом сервере. В нашем коде мы открываем и закрываем соединение для каждого запроса. Служба WCF обрабатывает несколько запросов в минуту в базе данных.Что может вызвать SqlClient для повторного использования недопустимых соединений?
Если я перезапущу службу SQL, не останавливая службу WCF, служба WCF начинает регистрировать ошибки в нашем журнале ошибок, что совершенно нормально.
Проблема заключается в том, что иногда (не всегда), после того, как служба SQL перезагрузки службы WCF продолжает отчеты эту ошибку при каждом запросе:
Cannot open database "mydatabase" requested by the login. The login failed."
Трассировка стека ошибки заканчивается:
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
В то время как это происходит, я могу подключиться к базе данных с помощью SQL Management Studio (с того же компьютера, на котором запущена служба WCF). Чтобы исправить эту проблему, мне нужно переработать пул приложений для моей службы WCF.
Итак, мой вопрос: что может вызвать это и что я могу сделать, чтобы мое приложение могло восстановиться после перезапуска SQL?
P.S .: На моем ящике dev (также работает IIS), когда я делаю тот же тест, я получаю ту же ошибку несколько раз (в то время как база данных загружается, я полагаю), а затем она снова начинает работать.
Возможно, вы захотите попытаться поймать SqlException и проверить конкретный код ошибки, а затем вызвать SqlConnection.ClearPool (sqlConnection); затем повторите заявление еще раз – Termit