【问题标题】:Azure Cosmos DB - intermittent MongoConnectionException / IOException / SocketExceptionAzure Cosmos DB - 间歇性 MongoConnectionException / IOException / SocketException
【发布时间】:2021-06-04 17:51:29
【问题描述】:

我将 Azure Cosmos DB 4.0 与 MongoDB C# Driver 2.10.4 结合使用。

大多数情况下查询都可以正常工作,但我会遇到类似这样的间歇性错误:

MongoDB.Driver.MongoConnectionException:向服务器发送消息时发生异常。 System.IO.IOException:无法将数据写入传输连接:现有连接被远程主机强行关闭。 System.Net.Sockets.SocketException:现有连接被远程主机强行关闭 在 System.Net.Sockets.Socket.BeginSend(... 在 System.Net.Sockets.NetworkStream.BeginWrite --- 内部异常堆栈跟踪结束 --- 在 System.Net.Sockets.NetworkStream.BeginWrite 在 System.Net.Security._SslStream.StartWriting 在 System.Net.Security._SslStream.ProcessWrite 在 System.Net.Security._SslStream.BeginWrite

发生该错误时,调用需要 10-25 秒才能失败。

我正在使用 new MongoClient(MongoClientSettings.FromConnectionString(cnstr)) 构建 MongoClient,并且我正在使用带有这些参数的连接字符串 ?ssl=true&replicaSet=globaldb&retrywrites=false

我尝试使用 retryWrites=true(根据 Azure 支持建议),但没有帮助。

我尝试了不同的设置,但也没有用(connect=directmaxIdleTimeMS=30000serverSelectionTimeout=5000mssocketTimeout=10000ms)。

是什么导致了这些异常?

【问题讨论】:

    标签: mongodb azure azure-cosmosdb


    【解决方案1】:

    修复是设置/强制 TLS 1.2(基于 this Microsoft document):

    //return new MongoClient(connectionString);
    var settings = MongoClientSettings.FromConnectionString(connectionString);
    settings.SslSettings = new SslSettings()
    {
        EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12
    };
    return new MongoClient(settings);
    

    看起来虽然我的连接字符串有ssl=true,但在某些服务器上还不够(错误是间歇性的)。 forcing TLS 1.2 通常可以修复相同的潜在错误,所以我认为在 Mongo 中它可能是相同的问题 - 它确实解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-09
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      相关资源
      最近更新 更多