MongoServer.State相当于在2.0驱动程序
问题描述:
在旧的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)的一部分。这怎么能实现?
答
更合适的方式来做到这一点是不通过检查服务器,而是集群(其中可能包含多个服务器),你可以直接从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.
}