在旧的API(1.X)中,您可以使用从State
返回的MongoServer
实例上的MongoClient.GetServer
属性判断服务器是否已连接:
public bool IsConnceted
{
get
{
return _client.GetServer().State == MongoServerState.Connected;
}
}
但是GetServer
不是新API(2.0)的一部分。怎么能实现呢?
答案 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;
}
}
请记住,该值由上一次操作更新,因此可能不是最新的。实际确保有效连接的唯一方法是执行某种操作。
答案 1 :(得分: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.
}