在Azure上基于Linux的docker容器上从.net core 2.2连接Atlas MongoDb的间歇性TimeoutException

在Azure上基于Linux的docker容器上从.net core 2.2连接Atlas MongoDb的间歇性TimeoutException,mongodb,azure,docker,.net-core,Mongodb,Azure,Docker,.net Core,我有一个基于.Net Core 2.2的应用程序,它连接到Atlas中的MondoDb cluster V3.6。该应用程序作为Linux Docker容器托管在Azure中。该应用程序正在使用MongoDB.Net驱动程序2.7.3。应用程序定期(几分钟一次)接收以下超时异常: System.TimeoutException at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException 及 mongo客户端实例是根据MongoDb

我有一个基于.Net Core 2.2的应用程序,它连接到Atlas中的MondoDb cluster V3.6。该应用程序作为Linux Docker容器托管在Azure中。该应用程序正在使用MongoDB.Net驱动程序2.7.3。应用程序定期(几分钟一次)接收以下超时异常:

System.TimeoutException at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException

mongo客户端实例是根据MongoDb文档配置的,即

var url = MongoUrl.Create("mongodb+srv://user:password@cluster.gcp.mongodb.net/?authSource=admin&retryWrites=true&ssl=true");
        var clientSettings = MongoClientSettings.FromUrl(url);
        clientSettings.SslSettings = new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 };

        void SocketConfigurator(Socket s) => s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);

        clientSettings.ClusterConfigurator = builder =>
            builder.ConfigureTcp(tcp => tcp.With(socketConfigurator: (Action<Socket>)SocketConfigurator));

        return new MongoClient(clientSettings);
var url=MongoUrl.Create(“mongodb+srv://user:password@cluster.gcp.mongodb.net/?authSource=admin&retryWrites=true&ssl=true“;
var clientSettings=MongoClientSettings.FromUrl(url);
clientSettings.SslSettings=new SslSettings(){EnabledSslProtocols=SslProtocols.Tls12};
void SocketConfigurator(sockets)=>s.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.KeepAlive,true);
clientSettings.ClusterConfigurator=builder=>
builder.ConfigureTcp(tcp=>tcp.With(socketConfigurator:(Action)socketConfigurator));
返回新的MongoClient(客户端设置);

我检查了一些SO问题,包括和,但建议似乎已经过时(在当前版本的驱动程序中报告为已修复),或者没有永久的积极影响(在连接字符串中设置超时,即connectTimeoutMS=90000&SockettTimeoutms=90000&maxIdleTimeMS=90000)。第二个(设置tcp_keepalive_time)似乎不适用于Azure中的docker容器。请帮助。

您是否尝试过这样设置:

var client = new MongoClient(new MongoClientSettings
{
       Server = new MongoServerAddress("xxxx"),
       ClusterConfigurator = builder =>
       {
             builder.ConfigureCluster(settings => settings.With(serverSelectionTimeout: TimeSpan.FromSeconds(10)));
       }
});

嗯,原因是网络问题。一旦我们将Atlas db从Google主机移动到Azure主机,套接字打开操作的超时就消失了。仍然不确定是哪一方导致了问题。您是否设法解决了此问题?我经常收到这个
var client = new MongoClient(new MongoClientSettings
{
       Server = new MongoServerAddress("xxxx"),
       ClusterConfigurator = builder =>
       {
             builder.ConfigureCluster(settings => settings.With(serverSelectionTimeout: TimeSpan.FromSeconds(10)));
       }
});