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 と関係があると思われますが、このエラーの原因がわかりません。環境間の唯一の違いは、アプリケーション プールが開発環境では NetworkService によって実行され、運用環境では AD アカウントによって実行されることです。まだサイトを立ち上げていないため、ユーザー数に違いはありません。

開発環境でエラーを発生させるために最大プール サイズ = 10 に設定しようとしましたが、それでも機能します。

何か案は?

アップデート

接続が漏れているようです

using (SqlCommand cmd = new SqlCommand())
{
      cmd.CommandType = CommandType.Text;
      cmd.Connection = ConnectionUtil.CreateNewConnection();

      //query code 
}

上記のコードは SqlCommand を破棄するだけで、接続を閉じないと推測しています。

私は正しいですか?

4

1 に答える 1

1

Finalブロックで接続を閉じるのを忘れたときに、このエラーが表示されていました。

従来の ASP に戻ると、既定のデータベース言語がデータベースの既定ではなく英語に設定されていると、"エラー" が表示されていました。(これは、キャッチできなかった例外をスローしていました - 少なくとも従来の ASP ではそうではありませんでした)

于 2012-07-05T13:11:52.070 に答える