我有一个基于 asp.net 4 的 Web 应用程序,但存在连接池问题。
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached
起初我以为有一些连接我忘了关闭,但似乎不是问题所在。当我设置 Pooling=False 时,我可以看到所有连接都已释放(通过查看 ssms)。
奇怪的是,这个问题只发生在我们的生产环境中。我尝试在本地启动 Web 应用程序并将其连接到生产数据库,然后它工作正常(释放连接)。这让我认为它与 IIS 有关,但我不知道是什么导致了这个错误。环境之间的唯一区别是应用程序池由 dev 中的 NetworkService 和 prod 中的 AD 帐户运行。由于该网站尚未启动,因此用户数量没有差异。
我什至尝试设置 Max Pool Size = 10 以在我们的开发环境中引发错误,但它仍然有效。
有任何想法吗?
更新
看起来我们有泄漏的连接
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.Text;
cmd.Connection = ConnectionUtil.CreateNewConnection();
//query code
}
我猜上面的代码只会处理 SqlCommand 但不会关闭连接。
我对吗?