测试MongoDB服务器是否在运行时是副本集的一部分

时间:2013-11-13 17:45:07

标签: c# mongodb mongodb-.net-driver

我在多个环境中部署了相同的软件,有些使用MongoDB副本集,有些使用单个服务器。我使用WriteConcern.WMajority进行某些更新操作,但如果服务器不是副本集的一部分,则会引发异常。

我正在寻找一种方法来询问服务器它是否是副本集的一部分,因此我将知道使用WriteConcern.WMajority是否安全。我的尝试是这样的:

string connStr = System.Configuration.ConfigurationManager
    .ConnectionStrings["connStrName"].ConnectionString;
var server = new MongoDB.Driver.MongoClient(connStr).GetServer();
bool isReplicaSet = server.GetDatabase("admin")
    .RunCommand("replSetGetStatus").Ok;

但这会引发MongoDB.Driver.MongoCommandException: Command 'replSetGetStatus' failed: not running with --replSet (response: { "ok" : 0.0, "errmsg" : "not running with --replSet" })。抓住这个例外是我最好的选择吗?

1 个答案:

答案 0 :(得分:1)

public bool IsPartOfReplicaSet(string connectionString)
{
    var result = new MongoClient(connectionString)
        .GetServer()
        .GetDatabase("admin")
        .RunCommand("getCmdLineOpts")
        .Response["parsed"] as BsonDocument;

    return result.Contains("replSet");
}