4

同じasp.net mvc Webアプリケーションを実行しているWebサーバーがいくつかあり、1つのmongodbサーバーに接続しています。IIS を再起動しても、1 つの Web サーバーが SocketException をスローし続けます。他は正常に動作しています。例外はこれが初めてではありません。数週間前、別の Web サーバーで同じ問題が発生しましたが、当時は他のサーバーが機能していました。エラー メッセージ:

システムに十分なバッファ スペースがないか、キューがいっぱいであるため、ソケットに対する操作を実行できませんでした。

今はサーバーを再起動して問題を一時的に修正する以外に何もできません。65534に変更して、Web サーバーの動的ポート範囲が正しく設定されていることを確認しますHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort。C# mongodb ドライバーのバグではないかと疑っています。ドライバーのソース コード、特に接続が解放されるMongoCursorEnumerator.csを調べました。クラスMongoCursorEnumerator<TDocument>が実装さIDisposableれ、そのDisposeメソッドで接続が正しく解放されます。Disposeただし、GC での呼び出しを保証するデストラクタ (ファイナライザ) はありません。

ここで、すべての接続関連のコードがusingプロジェクト内のブロックに正しくラップされていることを確認します。この状況で、デストラクタ/ファイナライザがないために SocketException が発生することはありますか? そうでない場合、この例外の考えられる理由は何ですか?

詳細情報: ASP.NET MVC 3、Windows Server 2008 R2、Mongo DB 2.0、Mongo Db Driver for C# 1.5

アップデート

mongo db C# ドライバーの最新バージョンは問題を解決します

4

2 に答える 2

0

このエラー (Windows オペレーティング システムから直接発生するエラー) の原因の 1 つは、TCP/IP 接続が頻繁に開いたり閉じたりすることです。

コードのどこかで切断を呼び出していますか? これにより、すべてのソケットが閉じられ、新しいソケットが開かれて置き換えられます。

于 2013-05-05T22:15:16.253 に答える
0

mongodb ドライバーを 2.12 以降にアップグレードすると、この例外をキャッチできます。

于 2016-06-29T13:51:38.750 に答える