2013-04-08 1 views

ответ

3

К сожалению, после копания немного глубже, хотя через исходный код драйвера C# (и исходный код Java, чтобы увидеть, что он делает), фактический адрес сервера, который использовался как часть выборки, скрыт в Enumerator как частный член (_serverInstance).

В частности, он скрыт в классе под названием MongoCursorEnumerator. К сожалению, нет «честного» способа добраться до него. Вы могли бы использовать .NET-отражение, я полагаю, чтобы добраться до него, но это, как правило, не очень хорошая идея, особенно с кодом, которым вы не владеете. Если вы хотите иметь собственную вилку драйвера, вы можете легко добавить ее как новое свойство. Возможно, вы захотите добавить проблему here.

В общем, вы можете получить экземпляры, используемые соединением MongoDB, поскольку они доступны в классе MongoServerInstance, Address.

var client = new MongoClient(); 
var server = client.GetServer(); 
// server.Instance.Address 

Documentation

Однако в вашем случае вы также можете получить его из cursor через Server собственности:

cursor.Server.Instance.Address.Host 

или

cursor.Server.Instances[] 

Cursor Server Documentation

Драйвер C# интересно бросает и исключает, когда доступно более одного экземпляра. Итак, если вы не знаете, сколько экземпляров существует, вам нужно либо обработать exception (InvalidOperationException), либо всегда использовать свойство Instances[] для возврата связанных экземпляров.

+0

Спасибо, WiredPrairie. Я попробовал, но это не тот, который я ищу. Он возвращает IP-адрес в строке соединения. В моем случае я подключаюсь к репликации, у которой есть 2 вторичных сервера. Я хочу получить адрес сервера, на который извлекаются данные. Я использую ReadPreference.Secondary mode. Во время чтения документа драйверы будут выполнять циклический и маршрутный запрос на серверы. –

+0

@TuongHuynh - Ahh. Я неправильно понял. Это почти идентично. См. Edit (через свойство 'cursor.Server.Address'. – WiredPrairie

+0

@TuongHuynh - Что происходит, когда вы используете' Instances'? – WiredPrairie