接続プールの問題がある 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 と関係があると思われますが、このエラーの原因がわかりません。環境間の唯一の違いは、アプリケーション プールが開発環境では NetworkService によって実行され、運用環境では AD アカウントによって実行されることです。まだサイトを立ち上げていないため、ユーザー数に違いはありません。
開発環境でエラーを発生させるために最大プール サイズ = 10 に設定しようとしましたが、それでも機能します。
何か案は?
アップデート
接続が漏れているようです
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.Text;
cmd.Connection = ConnectionUtil.CreateNewConnection();
//query code
}
上記のコードは SqlCommand を破棄するだけで、接続を閉じないと推測しています。
私は正しいですか?