不幸的是,在深入研究 C# 驱动程序源代码(以及 Java 源代码以了解它在做什么)之后,用作获取一部分的实际服务器地址作为私有成员隐藏在枚举器中(_serverInstance
).
特别是,它隐藏在一个名为MongoCursorEnumerator
。不幸的是,没有一种“诚实”的方式来实现这一点。我想您可以使用 .NET 反射来实现它,但这通常不是一个好主意,尤其是对于您不拥有的代码。如果您想要驱动程序的自定义分支,您可以轻松地将其添加为新属性。您可能想添加一个问题here https://jira.mongodb.org.
一般来说,您可以获得 MongoDB 连接使用的实例,因为它们在MongoServerInstance
类,该Address
财产。
var client = new MongoClient();
var server = client.GetServer();
// server.Instance.Address
文档 http://api.mongodb.org/csharp/current/?topic=html/4367254d-0112-f256-be8e-cc97ebc189ab.htm
但是,就您而言,您也可以从cursor
通过Server
财产:
cursor.Server.Instance.Address.Host
or
cursor.Server.Instances[]
游标服务器文档 http://api.mongodb.org/csharp/current/?topic=html/ec0ea469-51cb-255a-ee27-5b814f0565ff.htm
有趣的是,当有多个实例可用时,C# 驱动程序会抛出异常。因此,如果您不知道有多少实例,您要么需要处理exception
(InvalidOperationException
),或者始终使用Instances[]
属性来返回关联的实例。