MongoDB.Driver.MongoConnectionException:打开到服务器的连接时发生异常

本文关键字:连接 异常 服务器 MongoConnectionException Driver MongoDB | 更新日期: 2023-09-27 18:11:17

所以,我在Azure VM上使用MongoDB,并且我在Azure网站上托管了一个网站作为服务。我的问题是:有时我得到这样的错误:

"Exception: MongoDB.Driver.MongoConnectionException:打开连接到服务器时发生异常。--> System.Net.Sockets.SocketException:连接尝试失败,因为被连接方在一段时间后没有正确响应,或者已建立的连接失败,因为连接的主机未能响应"

在我得到这个错误后,只要我再次访问端点,我马上就成功了。

细节:

ConnectionString: mongodb://xxx.aaa.net:1000, xxx.aaa.net:1001, xxx.aaa.net:1002/?readPreference=nearest

在打开与Mongo的连接之前,我设置MaxConnectioIdleTimeout属性,如"MongoDefaults"。MaxConnectionIdleTime = TimeSpan.FromSeconds(30);默认情况下,azure LoadBalancer的空闲超时在4分钟后变为不活动

所以,我不知道发生了什么。

有人能帮我吗?

MongoDB.Driver.MongoConnectionException:打开到服务器的连接时发生异常

是的,4分钟。如果连接会话保持空闲状态长达4分钟,Azure将关闭连接会话。但是mongodb驱动程序不知道它,它仍然会从连接池中获得这个连接。您可以将MaxConnectionIdleTime(mongodb驱动设置)设置为小于4分钟,或者通过powershell将azure VM的最大会话空闲时间设置为更大(最大30分钟)。

顺便说一句,如果你的网站也托管在azure访问mongodb服务器与私有IP(PIP),不会有这个问题。

当我向@apodemakels询问一些官方文档时,我找到了MongoDB生产说明,其中声明:
默认情况下,Azure负载平衡器上的TCP空闲超时为240秒,如果Azure系统上的TCP keepalive大于此值,则可能导致它静默地丢弃连接。您应该将tcp_keepalive_time设置为120以改善此问题。

此外,关于这个问题,MongoDB Jira上有一张票。

我希望这两个文档可以帮助解决这个问题,或者万一有人遇到类似的情况