【问题标题】:This MongoDB deployment does not support retryable writes Exception on ASP.net core此 MongoDB 部署不支持 ASP.net 核心上的可重试写入异常
【发布时间】:2020-04-09 14:12:18
【问题描述】:

我正在研究 asp.net core 和 mongo db。在这里,我正在尝试使用以下代码实现事务支持

using (var session = await _mongoClient.StartSessionAsync())
{
    try
    {

        session.StartTransaction();
        await _dbCollection.InsertOneAsync(session,obj);
        //throw new Exception("No document found");
        await session.CommitTransactionAsync();
    }
    catch (Exception ex)
    {
        //session.AbortTransaction();
        await session.AbortTransactionAsync();
    }
}

但它正在抛出异常

MongoDB.Driver.MongoCommandException:此 MongoDB 部署不 支持可重试写入。请将 retryWrites=false 添加到您的 连接字符串。

下面的代码,我用来创建连接

_mongoClient = new MongoClient(config.GetConnectionString("CarGalleryDb"));
        //MongoClientSettings mongoClientSettings = new MongoClientSettings();
        //mongoClientSettings.RetryWrites = false;

        _db = _mongoClient.GetDatabase(config.GetConnectionString("DBName"));

我的连接字符串是

"ConnectionStrings": {
"CarGalleryDb": "mongodb://localhost:27017?retryWrites=false",
"DBName": "MongoTestDB"

},

谁能支持我解决这个问题?

【问题讨论】:

  • 你的连接字符串是什么?连接字符串末尾有retryWrites=false 吗?
  • "mongodb://localhost:27017?retryWrites=false" 这个是我的连接字符串
  • _mongoClient = new MongoClient(config.GetConnectionString("ConnectonString")); _db = _mongoClient.GetDatabase(config.GetConnectionString("DBName"));
  • 如何初始化你的客户端?您也可以尝试使用MongoClientSettings.RetryWrites。我添加了一个答案,请检查
  • @SelimYıldız,抱歉回复晚了。它对我不起作用。我已经用我正在使用的连接创建代码和连接字符串更新了这个问题。

标签: asp.net mongodb asp.net-core


【解决方案1】:

您需要在您的连接字符串末尾添加retryWrites=false

Retryable Writes in Mongo

所需的官方 MongoDB 3.6 和 4.0 兼容驱动程序包括 连接字符串中的 retryWrites=true 选项以启用 该连接的可重试写入。

兼容 MongoDB 4.2 的官方驱动启用 Retryable Writes by 默认。升级到 4.2 兼容驱动程序的应用程序 要求可重试写入可能会省略 retryWrites=true 选项。 升级到 4.2 兼容驱动程序的应用程序需要 禁用可重试写入必须在 连接字符串。

或者你可以使用MongoClientSettings.RetryWrites在代码中设置:

https://mongodb.github.io/mongo-csharp-driver/2.7/apidocs/html/P_MongoDB_Driver_MongoClientSettings_RetryWrites.htm

【讨论】:

    【解决方案2】:

    当您使用已弃用的 MMAPv1 存储引擎时会产生此错误。如果可以的话,您应该升级到 WiredTiger(以及更新的 MongoDB 版本,因为 MMAPv1 已在 4.2 中完全删除)。

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 2022-01-12
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多