5

根据 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(),并且使用了正确的服务器名称。任何帮助表示赞赏!

4

2 回答 2

16

目前我正在学习 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 秒以确认写入。

于 2015-07-04T04:34:50.397 回答
5

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

connection = "mongodb://servername/?safe=true&connect=replicaset";
m_server = MongoServer.Create(connectionString);
于 2012-08-09T03:54:35.863 回答