2

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

我对吗?

4

1 回答 1

1

当我忘记关闭 finally 块中的连接时,我曾经看到过这个错误。

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

于 2012-07-05T13:11:52.070 回答