我们有一个WCF服务托管在IIS中,运行在服务器上。该服务连接到另一台服务器上运行的SQL Server实例。在我们的代码中,我们打开并关闭每个请求的连接。 WCF服务每分钟向数据库发出几个请求。什么会导致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重新启动恢复?在我的开发盒(也运行IIS)上,当我做同样的测试时,我几次得到相同的错误(当数据库开始加载时,我想),然后它再次开始工作。
您可能希望尝试捕获SqlException并检查特定的错误代码,然后调用SqlConnection.ClearPool(sqlConnection);然后再重试一次该声明 – Termit