サーバー上で実行されている IIS でホストされている WCF サービスがあります。このサービスは、別のサーバーで実行されている SQL Server インスタンスに接続します。このコードでは、リクエストごとに接続を開いたり閉じたりします。WCF サービスは、データベースに対して毎分複数の要求を行います。
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()
これが発生している間、(WCF サービスを実行している同じマシンから) SQL Management Studio を使用してデータベースに接続できます。この問題を解決するには、WCF サービスのアプリケーション プールをリサイクルする必要があります。
私の質問は次のとおりです。何が原因で、アプリが SQL の再起動から回復できるようにするにはどうすればよいですか?
PS: 私の開発ボックス (IIS も実行中) で、同じテストを実行すると、同じエラーが数回発生し (データベースのロードが開始されていると思われます)、その後、再び動作を開始します。