2

我知道我们在 Java 驱动程序中使用 cursor.getServerAddress()。但是,我在 C# 中找不到任何相关的调用。

4

1 回答 1

3

不幸的是,在通过 C# 驱动程序源代码(以及 Java 源代码以查看它在做什么)进行更深入的挖掘之后,用作获取的一部分的实际服务器地址作为私有成员隐藏在 Enumerator 中( _serverInstance)。

特别是,它隐藏在一个名为MongoCursorEnumerator. 不幸的是,没有一种“诚实”的方式来实现它。我想你可以使用 .NET 反射来实现它,但这通常不是一个好主意,尤其是对于你不拥有的代码。如果您想拥有驱动程序的自定义分支,您可以轻松地将其添加为新属性。您可能想在此处添加问题。

通常,您可以获取 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[]属性来返回关联的实例。

于 2013-04-08T19:37:20.053 回答