我知道我们在使用cursor.getServerAddress()的Java驱动程序中有它。但是,我在C#中找不到任何相关的电话。
答案 0 :(得分:3)
不幸的是,在深入挖掘C#驱动程序源代码(以及Java源代码以查看它正在做什么)之后,将作为获取的一部分使用的实际服务器地址隐藏在Enumerator中私人会员(_serverInstance
)。
特别是,它被隐藏在一个名为MongoCursorEnumerator
的类中。不幸的是,没有“诚实”的方式来实现它。我可以使用.NET反射来实现它,但这通常不是一个好主意,特别是对于你不拥有的代码。如果您想拥有驱动程序的自定义分支,则可以轻松地将其添加为新属性。您可能想要添加问题here。
通常,您可以获取MongoDB连接使用的实例,因为它们在MongoServerInstance
类Address
属性上可用。
var client = new MongoClient();
var server = client.GetServer();
// server.Instance.Address
但是,在您的情况下,您也可以通过cursor
属性从Server
获取它:
cursor.Server.Instance.Address.Host
或
cursor.Server.Instances[]
当有多个Instance可用时,C#驱动程序会引发异常抛出和异常。因此,如果您不知道有多少个实例,则需要处理exception
(InvalidOperationException
),或者始终使用Instances[]
属性来返回关联的实例。