2013-04-08 145 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