同じ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# ドライバーの最新バージョンは問題を解決します