2013-04-08 146 views

回答

3

不幸的是,儘管通過C#驅動程序源代碼(以及Java源代碼查看它在做什麼)深入瞭解了一些內容,但作爲提取一部分使用的實際服務器地址隱藏在枚舉器中作爲私人會員(_serverInstance)。

特別是,它隱藏在名爲MongoCursorEnumerator的類中。不幸的是,沒有一個「誠實」的方式來獲得它。你可以使用.NET反射來實現它,但這通常不是一個好主意,特別是對於你不擁有的代碼。如果您想擁有該驅動程序的自定義分支,則可以輕鬆將其添加爲新屬性。您可能想要添加問題here

通常,您可以獲取MongoDB連接使用的實例,因爲它們在MongoServerInstance類,Address屬性上可用。

cursor.Server.Instance.Address.Host 

cursor.Server.Instances[] 

Cursor Server Documentation

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

Documentation

然而,在你的情況,你也可以從cursor通過Server財產得到它

當有多個實例可用時,C#驅動程序會引發有趣的拋出和異常。因此,如果您不知道有多少個實例,則需要處理exceptionInvalidOperationException),或者始終使用Instances[]屬性返回關聯的實例。

+0

謝謝WiredPrairie。我試過了,但它不是我正在尋找的那個。它會在連接字符串中返回IP地址。在我的情況下,我連接到具有2個輔助服務器的複製組。我想獲取從中提取數據的服務器的服務器地址。我使用ReadPreference.Secondary模式。在我們閱讀文檔時,驅動程序將循環查詢並將查詢路由到服務器。 – 2013-04-08 22:02:11

+0

@TuongHuynh - 啊。我誤解了。它幾乎相同。請參閱編輯(通過'cursor.Server.Address'屬性。 – WiredPrairie 2013-04-09 00:04:53

+0

@TuongHuynh - 當使用Instances時會發生什麼? – WiredPrairie 2013-04-09 01:32:27