2015-04-05 89 views
2

在旧的API(1.X),你可以告诉服务器是否被使用在MongoServer实例State财产有关的或不是从MongoClient.GetServer返回:MongoServer.State相当于在2.0驱动程序

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

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

回答

5

更合适的方式来做到这一点是不通过检查服务器,而是集群(其中可能包含多个服务器),你可以直接从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; 
    } 
} 

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

2

正如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. 
} 
相关问题