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

时间:2015-04-05 17:16:53

标签: c# .net mongodb mongodb-.net-driver mongodb-csharp-2.0

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

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

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

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;
    }
}

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

答案 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.
}