2.0驱动程序中的MongoServer.State等价物

在旧的API(1.X)中,您可以使用MongoServer返回的MongoServer实例上的State属性来判断服务器是否已连接:

 public bool IsConnceted { get { return _client.GetServer().State == MongoServerState.Connected; } } 

但是, GetServer不是新API(2.0)的一部分。 怎么能实现呢?

更合适的方法不是通过检查服务器而是检查群集(可能包含多个服务器),您可以直接从MongoClient实例访问它:

 public bool IsClusterConnceted { get { return _client.Cluster.Description.State == ClusterState.Connected; } } 

如果您想检查也可能的特定服务器:

 public bool IsServerConnceted { get { return _client.Cluster.Description.Servers.Single().State == ServerState.Connected; } } 

请记住,该值由上一次操作更新,因此可能不是最新的。 实际确保有效连接的唯一方法是执行某种操作。

正如i3arnon所指出的,在正确更新状态之前,必须对数据库执行某种操作。

枚举数据库的行为足以更新状态。

这对我有用:

 var databases = _client.ListDatabasesAsync().Result; databases.MoveNextAsync(); // Force MongoDB to connect to the database. if (_client.Cluster.Description.State == ClusterState.Connected) { // Database is connected. }