ここStackOverflowで以前に質問されましたが、私の経験では、答えは実際には間違っていました。少なくとも .NET Framework 4.0 と SQL Server 2005 では、これらは間違っています。
これを完全に整理するには、助けが必要です。
問題は、ステートレス WCF サービスで何らかの方法でデータベース接続プールを使用できるかどうかです。
ステートレス WCF サービスを参照してください ...
以前の回答では、本質的に、問題はなく、他の ADO.NET シナリオとの違いはないと述べられていました。ただし、ステートレス WCF サービスで接続プーリング EVER を使用することはできませんでしたが、WCF サービスの外部では常に動作することがわかります。使用しようとしている接続文字列またはパラメーターに関係なく、それは行われません。
データベース接続プールはデフォルトで有効になっているため、たとえば SQL Server Express では、単純な接続文字列でアクセスできるはずです。
SqlConnection sqlCn = new SqlConnection("Data Source=SERVER\SQLEXPRESS; Initial Catalog = xDB; Integrated Security = SSPI;")
この接続を使用して、Windows フォーム アプリケーションでsqlCn.Open()
-- query the database --を 3 回連続して実行するとsqlCn.Close()
、最初の で長い遅延 (たとえば 2 秒) がsqlCn.Open()
発生し、クエリとオープンでまったく遅延が発生しません。 / その後閉じます。まさに私がデータベース接続プーリングに期待していることです。
sqlCn.Open()
しかし、同じコード (データベースのクエリ)を含む WCF サービスを 3 回呼び出すと、sqlCn.Close()
1 回の呼び出しごとに最初の 2 秒間の起動が遅くなります。
私の推測では、接続プーリングはコードによって作成された ADO.NET オブジェクトによって完全に制御されておりSqlConnection
、WCF サービス内で使用する ADO.NET クラス (など) をインスタンス化しているため、サービスが呼び出されるとそれらは破棄されます。終わり、接続プールもそれに伴います。
これは真実ではないかもしれませんが、そうでない場合、私が行ったことに何か問題がありますか?
誰でも経験がありますか?
(投稿する前に、仮定や理論をテストしてください)