1

投稿によって提供されたデータを取得してデータベース テーブルに記録する、比較的単純な Web サービスを開発しているときに、次のエラーが発生します。

キャッチされた例外: リモート サーバーがエラーを返しました: (500) 内部サーバー Er または。スタック トレース: System.Net.HttpWebRequest.GetResponse() で

一部のサーバーではありますが、他のサーバーではありません。これを実現しているのは物理マシンで、他は仮想マシンであり、明らかに物理サーバーの方がはるかに強力です。

私たちが知る限り、問題は、各クエリの後で DB 接続がプールに解放されていないことです。以下の使用パターンを使用しています。

                using (VoteDaoDataContext dao = new VoteDaoDataContext())
                {

                    dao.insert_response_and_update_count(answerVal, swid, agent, geo, DateTime.Now, ip);
                    dao.SubmitChanges();
                    msg += "Thank you for your vote.";
                    dao.Dispose();
                }

メソッドの終了時に接続が確実に解放されるように dao.Dispose() 呼び出しを追加しましたが、必要かどうかはわかりません。

このパターンを正しく使用していますか? 接続がプールに正しく返されるようにするために他に何かする必要がありますか?

ありがとう!

4

2 に答える 2

3

診断情報が不十分です。HTTP/500 は、あなたの理論が正しいかどうかを実際に判断するのに十分な詳細ではありません。問題を突き止めたい場合は、ログに完全なスタック トレースをキャプチャする必要があります。ここで結論に飛びついたと思います。いいえ、using{} ブロックの最後に Dispose() は必要ありません。それがusing{} の機能です。

于 2009-01-08T23:09:21.290 に答える
0

dispose() 呼び出しは冗長だと思いましたが、確認したかったのです。

SQL ログで接続プールが飽和状態になっているのを確認しています (私は直接見ることはできません。私は単なる開発者であり、これは本番環境で実行されています)。私の運用担当者は、接続がタイムアウトしているのを見ていると言いました。 .. タイムアウトになると、次回接続プールが飽和するまで、サーバーは再び実行を開始します。

現在、接続プールの設定を調整中です... Linq を使用するのはこれが初めてなので、間違ったことをしていないことを確認したかったのです。

ありがとう!

于 2009-01-09T00:54:31.997 に答える