我的基于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但不会关闭连接。
我是对的吗?
答案 0 :(得分:1)
当我忘记关闭Finally块中的连接时,我常常看到这个错误。
回到经典ASP,当默认数据库语言设置为英语而不是数据库默认值时,我常常看到“错误”。 (这用于抛出无法捕获的异常 - 至少在经典ASP中不会被捕获)