【问题标题】:C# MongoDb Connect to Replica Set IssueC# MongoDb 连接到副本集问题
【发布时间】:2012-08-08 23:39:01
【问题描述】:

根据 mongodb 网站,如果我只给它一个副本集中的成员,我应该能够连接到副本集:

“即使种子列表不完整,C#驱动程序也能够连接到副本集。只要至少有一个种子在种子列表中,它就会找到主服务器,即使它不在种子列表中列表响应(响应将包含完整的副本集和当前主节点的名称)。” http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-Connectionstrings

但是,如果我只是给它一个次要成员,我无法让我的驱动程序连接。

这是我当前的连接声明:

m_server = MongoServer.Create(new MongoServerSettings { ConnectionMode = ConnectionMode.ReplicaSet, Server = new MongoServerAddress(connection) });

“连接”变量是:mongodb://servername/?safe=true

我看到了这个:https://jira.mongodb.org/browse/CSHARP-500,我确实运行了 rs.status(),并且使用了正确的服务器名称。任何帮助表示赞赏!

【问题讨论】:

    标签: mongodb mongodb-.net-driver


    【解决方案1】:

    目前我正在学习 MongoDB,并且正在玩副本集连接。我喜欢用我用来连接数据库的 2 种方式做出贡献,这些方式我觉得有用,如果对任何人没有帮助,至少我将来会有一个地方可以参考(我确定我要去在某个时候需要它) 第一:

    var connString = "mongodb://localhost:27029,localhost:27027,localhost:27028?connect=replicaSet";
    var client = new MongoClient(connString);
    var db = client.GetDatabase("test");
    

    秒:

    var settings = new MongoClientSettings
    {
       Servers = new[]
       {
          new MongoServerAddress("localhost", 27027),
          new MongoServerAddress("localhost", 27028),
          new MongoServerAddress("localhost", 27029)
       },
       ConnectionMode = ConnectionMode.Automatic,
       ReplicaSetName = "m101",
       WriteConcern = new WriteConcern(WriteConcern.WValue.Parse("3"),wTimeout:TimeSpan.Parse("10"))
    };
    var client = new MongoClient(settings);
    

    首先,允许我通过服务器列表中指定的服务器连接到数据库。这允许驱动程序在主体发生故障的情况下自动连接到副本集中的新主体节点。 第二个,我发送副本集中的服务器列表,连接类型。副本集的名称和写入关注点配置。使用此设置,我强制驱动程序等待来自副本集中 3 个服务器的写入确认 (WValue:3),并最多等待 10 秒以确认写入。

    【讨论】:

      【解决方案2】:

      所以,连接变量是一个完整的连接字符串,而不是传递给 MongoServerAddress 的东西。此外,您还可以在连接字符串上指定连接模式。试试这个:

      connection = "mongodb://servername/?safe=true&connect=replicaset";
      m_server = MongoServer.Create(connectionString);
      

      【讨论】:

      • 是的,成功了!为什么使用 MongoServerSettings 不起作用?错误?
      • 不,正如我所指出的,您没有正确使用 mongo 服务器设置。连接字符串不会进入 MongoServerAddress。 new MongoServerAddress(host) 或 MongoServerAddress(host, port) 是正确的构造。
      • 明白了...我误解了第一句话。感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2014-07-20
      • 1970-01-01
      相关资源
      最近更新 更多