c#无法连接到与读取首选项Primary匹配的副本集的成员

时间:2013-04-17 19:36:41

标签: c# mongodb driver

好的我在linux服务器上安装了两个带有replicaset的节点。

在使用1.8.1.20驱动程序的c#应用程序中我有

client = new MongoClient(“mongodb://54.244.162.21,54.234.244.182/rs0?connect = replicaset; replicaSet = rs0; slaveOk = true; readPreference = primaryPreferred”);

- 当我将mongo连接到主节点和从节点时,更新和查找语句都能正常工作。

- 当我尝试关闭主要或次要节点时,我得到: 无法连接到与读取首选项主

匹配的副本集的成员

- 当两个节点都启动时,我没有错误,一切正常。

- 我试图将readPreference更改为每个可能的值,因为我想看看冗余是如何工作的。

我出错了吗?我假设你应该能够连接任何一个,至少让读取工作。以下代码就是我在第一次建立连接时明显发生异常的原因。

        server = client.GetServer();

        foreach (string db in server.GetDatabaseNames())
        {
            Debug.WriteLine(db);
        }

1 个答案:

答案 0 :(得分:0)

问题是某些数据库命令只能在主数据库上运行。如果在连接到没有主副本的副本集时发出一个,则会出现此错误。

在这种情况下,命令是server.GetDatabaseNames() - 它可能是一个疏忽,它无法在辅助节点上运行此命令,但目前就是这样。

我将检查维护MongoDB驱动程序的人员,看看是否应该在辅助驱动程序上允许此命令。

对于您的示例,我认为如果您的程序连接然后发出读取查询,您会发现它可以正常工作。