Дано:
сервер на Host1:27017 (Master)
сервер на Host2:27017 (Slave)
MongoClientSettings settings = new MongoClientSettings();
settings.ReplicaSetName = "MyReplica";
settings.ConnectionMode = ConnectionMode.ReplicaSet;
settings.ReadPreference = new ReadPreference(ReadPreferenceMode.Secondary);
settings.Server = new MongoServerAddress("Host2", 27017);
MongoClient client = new MongoClient(settings);
var dbadmin = client.GetDatabase("admin");
//Класс ReplicaInfo соответствует JSON ответу на rs.Status()
var replSetGetStatus = dbadmin.RunCommand<ReplicaInfo>("{ replSetGetStatus: 1 }");
//Класс Member соответствует описанию члена реплики по rs.Status()
Member memberInfo = replSetGetStatus.members.First(x => x.Self);
Console.WriteLine(memberInfo.Name + ":" + memberInfo.StateStr);
На консоль при этом выводится Host1:27017:PRIMARY
Вопрос почему?
Сразу скажу, что при подключении ConnectionMode.Direct вывод на консоль: Host2:27017:SECONDARY
Сокращенный вариант классов:
[BsonIgnoreExtraElements]
class Members
{
[BsonElement("self")]
public bool Self { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("stateStr")]
public string StateStr { get; set; }
}
[BsonIgnoreExtraElements]
class ReplicaInfo {
[BsonElement("members")]
public List<Members> members { get; set; }
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей