3

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

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

但是GetServer,它不是新 API (2.0) 的一部分。怎样才能做到这一点?

4

2 回答 2

8

更合适的方法不是检查服务器,而是检查集群(可能包含多个服务器),您可以直接从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;
    }
}

请记住,该值是由最后一次操作更新的,因此它可能不是最新的。真正确保存在有效连接的唯一方法是执行某种操作。

于 2015-04-05T17:16:52.863 回答
5

如前所述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.
}
于 2015-08-16T20:21:40.450 回答