MongoDB连接导致System.Net.Sockets.SocketException异常

本文关键字:Sockets SocketException 异常 Net System 连接 MongoDB | 更新日期: 2023-09-27 17:51:07

我有几个web服务器运行相同的asp.net mvc web应用程序,连接到一个mongodb服务器。一个web服务器一直抛出SocketException,即使我重新启动IIS。其他的都很好。这不是第一次出现这种例外情况。几周前,一个不同的web服务器出现了同样的问题,而当时其他服务器正在工作。错误信息:

由于系统错误,无法对套接字执行操作没有足够的缓冲区空间或队列已满。

现在我只能重启服务器来暂时解决这个问题。通过将HKEY_LOCAL_MACHINE'System'CurrentControlSet'Services'Tcpip'Parameters'MaxUserPort修改为65534,我确保web服务器的动态端口范围正确设置。现在我怀疑这是否是c# mongodb驱动程序的错误。我查看了驱动程序的源代码,特别是释放连接的MongoCursorEnumerator.cs。MongoCursorEnumerator<TDocument>类实现了IDisposable,并在Dispose方法中正确地释放了连接。但是它没有析构函数(终结器),这保证了在GC中调用Dispose

现在我确保所有连接相关的代码都正确地包装在项目中的using块中。在这种情况下,缺少析构函数/终结器会导致SocketException吗?如果不是,那么这个异常可能的原因是什么?

更多信息:ASP。. NET MVC 3, Windows Server 2008 R2, Mongo DB 2.0, Mongo DB Driver for c# 1.5

最新版本的mongodb c#驱动程序解决了这个问题

MongoDB连接导致System.Net.Sockets.SocketException异常

这个错误(直接来自Windows操作系统)的一个原因是TCP/IP连接快速打开和关闭。

你在代码的任何地方调用断开连接吗?这将导致所有的套接字被关闭,这将导致新的套接字被打开以取代它们。

升级到mongodb驱动程序到2.12或更高版本将允许您捕获此异常