IISでホストされ、サーバー上で実行されているWCFサービスがあります。このサービスは、別のサーバーで実行されているSQL Serverインスタンスに接続します。コードでは、リクエストごとに接続を開いたり閉じたりします。 WCFサービスは、1分間に複数の要求をデータベースに送信します。SqlClientが無効な接続を再利用する原因は何ですか?
WCFサービスを停止せずにSQLサービスを再起動すると、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 .:同じテストを行うと、同じエラーが数回発生します(データベースのロードが開始されていると思いますが)。
SqlExceptionをキャッチして、特定のエラーコードを確認してから、SqlConnection.ClearPool(sqlConnection)を呼び出すと便利です。もう一度文を再試行してください – Termit