没有泄漏的连接池问题(!?)

时间:2012-07-04 13:11:51

标签: asp.net sql-server-2008-r2 iis-7.5

我的基于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但不会关闭连接。

我是对的吗?

1 个答案:

答案 0 :(得分:1)

当我忘记关闭Finally块中的连接时,我常常看到这个错误。

回到经典ASP,当默认数据库语言设置为英语而不是数据库默认值时,我常常看到“错误”。 (这用于抛出无法捕获的异常 - 至少在经典ASP中不会被捕获)