C#MongoDb连接到副本集问题

ant*_*123 3 mongodb mongodb-.net-driver

根据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) });

'connection'变量是: mongodb://servername/?safe=true

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

小智 10

此刻我正在学习MongoDB,而且我正在玩复制集连接.我喜欢用我用来连接数据库的2种方法做出贡献,如果对任何人都没有帮助,至少我将来有一个地方可以参考(我相信我会去在某些时候需要它)首先:

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

第二:

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);
Run Code Online (Sandbox Code Playgroud)

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


Cra*_*son 5

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

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