2013-11-22 61 views
0

我正在使用C#驱动程序来使用MongoDB。我需要使用我的程序在执行过程中更新设置配置,然后允许程序的其他部分继续使用驱动程序。MongoDB C#更改副本集配置

我目前的问题是重新配置驱动程序使用新的设置。

try 
{ 
    var res = Database.Admin.RunCommand(new CommandDocument("replSetReconfig", replicaSetConfig)); 
} 
catch (EndOfStreamException){} 
catch (Exception e) 
{ 
    Log.Exc("Problem updating replica set", e); 
    ranCommand = false; 
} 
if (ranCommand) 
{ 
HERE - I need to update the MongoClient or MongoServer to have the new servers 
    return; 
} 

我假设发生EndOfStreamException时,由于服务器已关闭/启动了重新配置,所以命令已成功。

我想更新驱动程序,让新的配置,以确保它肯定会重新连接到至少有一台服务器,在任何边缘的情况下,更改配置将阻止它连接回它的原始连接字符串。

有什么办法可以达到这个目的吗?

作为一个额外的问题,有没有办法从C#来确定当前的副本集配置版本?

感谢

回答

0

我可以回答你问题的第二部分 - 你可以查询本地数据库,以获得当前副本集配置:

MongoServer server = client.GetServer(); 
var local = server.GetDatabase("local"); 
var collection = local.GetCollection("system.replset"); 
var cfg = collection.FindOne(); 
Console.WriteLine(cfg["version"]); 

我会想象,如果原来的连接字符串没有有效期更长,您需要使用新的连接字符串创建一个新的MongoClient对象。

[稍后] 您还可以通过在管理数据库上运行replSetGetStatus命令来获取有关副本集的所有其他信息,包括其状态。