У меня есть приложение на основе .Net Core 2.2, которое подключается к кластеру MondoDb V3.6 в Atlas. Приложение размещается в Azure как контейнер Linux Docker. Приложение использует драйвер MongoDB .Net 2.7.3. Приложение периодически (раз в пару минут) получает следующие исключения тайм-аута:
System.TimeoutException at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException
и
System.TimeoutException at MongoDB.Driver.Core.Connections.TcpStreamFactory.ConnectAsync
Экземпляр клиента 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);
Я проверил количество вопросов SO, включая MongoDB C # 2.0 TimeoutException и SocketTimeout с открытым соединением в MongoDB , но предложения кажутся устаревшими (сообщается как исправленные в текущей версии драйвер) или не имеют постоянного положительного эффекта (установка таймаутов в строке подключения, т.е. connectTimeoutMS = 90000 & socketTimeoutMS = 90000 & maxIdleTimeMS = 90000). Второй вариант (установка tcp_keepalive_time), по-видимому, не применим к док-контейнеру в Azure. Пожалуйста, помогите.