C#MongoDb连接到副本集问题

时间:2012-08-08 23:39:02

标签: mongodb mongodb-.net-driver

根据mongodb网站的说法,如果我只是从副本集中给它一个成员,我应该可以连接到副本集:

“即使种子列表不完整,C#驱动程序也可以连接到副本集。只要种子服务器中至少有一个服务器,它就会找到主服务器,即使它不在种子列表中也是如此list responds(响应将包含完整的副本集和当前主副本的名称)。“ 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(),并使用了正确的服务器名称。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

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

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