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

C# :MongoDB.Driver.MongoConnectionException:打开与服务器的连接时发生异常,c#,mongodb,azure,mongodb-.net-driver,C#,Mongodb,Azure,Mongodb .net Driver,因此,我在Azure虚拟机上使用MongoDB,我有一个网站作为服务托管在Azure网站上。 我的问题是:有时我会遇到这样的错误: 异常:MongoDB.Driver.MongoConnectionException:打开与服务器的连接时发生异常。-->System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者因为连接的主机没有响应而建立的连接失败 在我得到这个错误后,只要我再次访问端点,我就立即成功了 详情: 连接字符串:mon

因此,我在
Azure虚拟机上使用
MongoDB
,我有一个网站作为服务托管在Azure网站上。 我的问题是:有时我会遇到这样的错误:

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

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

详情:

连接字符串:mongodb://xxx.aaa.net:1000,xxx.aaa.net:1001,xxx.aaa.net:1002/?readPreference=最近

在打开与Mongo的连接之前,我将MaxConnectionIdleTimeout属性设置为“MongoDefaults.MaxConnectionIdleTime=TimeSpan.FromSeconds(30);”,以保持连接处于活动状态,因为azure LoadBalancer的空闲超时默认在4分钟后变为不活动

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


有人能帮我吗?

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


顺便说一句,如果您的网站也托管在azure上,并使用专用IP(PIP)访问mongodb服务器,则不会出现此问题。

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


顺便说一句,如果您的网站也托管在azure上,并使用专用IP(PIP)访问mongodb服务器,则不会出现此问题。

当我向@apodemakels询问一些官方文档时,我发现其中的说明:
Azure负载平衡器上的TCP空闲超时默认为240秒,如果Azure系统上的TCP keepalive大于此值,则可能导致它以静默方式断开连接。您应该将tcp_keepalive_time设置为120以改善此问题

此外,在这个问题上还有一个问题


我希望这两份文件都能对此有所帮助,或者万一有人面临类似的情况。

当我向@apodemakels索取一些官方文件时,我发现其中写道:
Azure负载平衡器上的TCP空闲超时默认为240秒,如果Azure系统上的TCP keepalive大于此值,则可能导致它以静默方式断开连接。您应该将tcp_keepalive_time设置为120以改善此问题

此外,在这个问题上还有一个问题


我希望这两个文档都能对此有所帮助,或者万一有人遇到类似情况。

我不知道Azure会在空闲超过4分钟时关闭连接。在哪里可以找到这些文档?另一方面,在我的例子中,我没有虚拟机。它托管在Azure上的应用程序服务上。你知道同样的策略是否适用,如果适用,那么如何在Ap服务上设置最大会话?我不知道Azure是否会在空闲超过4分钟时关闭连接。在哪里可以找到这些文档?另一方面,在我的例子中,我没有虚拟机。它托管在Azure上的应用程序服务上。您知道相同的策略是否适用,如果适用,如何在Ap服务上设置最大会话?