Я знаю, что у нас есть это в Java-драйвере с помощью cursor.getServerAddress(). Однако я не смог найти соответствующий вызов в C#.Как получить сервер Адрес сервера, который извлекается из данных
ответ
К сожалению, после копания немного глубже, хотя через исходный код драйвера C# (и исходный код Java, чтобы увидеть, что он делает), фактический адрес сервера, который использовался как часть выборки, скрыт в Enumerator как частный член (_serverInstance
).
В частности, он скрыт в классе под названием MongoCursorEnumerator
. К сожалению, нет «честного» способа добраться до него. Вы могли бы использовать .NET-отражение, я полагаю, чтобы добраться до него, но это, как правило, не очень хорошая идея, особенно с кодом, которым вы не владеете. Если вы хотите иметь собственную вилку драйвера, вы можете легко добавить ее как новое свойство. Возможно, вы захотите добавить проблему here.
В общем, вы можете получить экземпляры, используемые соединением MongoDB, поскольку они доступны в классе MongoServerInstance
, Address
.
var client = new MongoClient();
var server = client.GetServer();
// server.Instance.Address
Однако в вашем случае вы также можете получить его из cursor
через Server
собственности:
cursor.Server.Instance.Address.Host
или
cursor.Server.Instances[]
Драйвер C# интересно бросает и исключает, когда доступно более одного экземпляра. Итак, если вы не знаете, сколько экземпляров существует, вам нужно либо обработать exception
(InvalidOperationException
), либо всегда использовать свойство Instances[]
для возврата связанных экземпляров.
Спасибо, WiredPrairie. Я попробовал, но это не тот, который я ищу. Он возвращает IP-адрес в строке соединения. В моем случае я подключаюсь к репликации, у которой есть 2 вторичных сервера. Я хочу получить адрес сервера, на который извлекаются данные. Я использую ReadPreference.Secondary mode. Во время чтения документа драйверы будут выполнять циклический и маршрутный запрос на серверы. –
@TuongHuynh - Ahh. Я неправильно понял. Это почти идентично. См. Edit (через свойство 'cursor.Server.Address'. – WiredPrairie
@TuongHuynh - Что происходит, когда вы используете' Instances'? – WiredPrairie