Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MongoServer.2.0驱动程序中的等效状态_C#_.net_Mongodb_Mongodb .net Driver_Mongodb Csharp 2.0 - Fatal编程技术网

C# MongoServer.2.0驱动程序中的等效状态

C# MongoServer.2.0驱动程序中的等效状态,c#,.net,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,.net,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,在旧API(1.X)中,您可以通过使用从MongoClient.GetServer返回的MongoServer实例上的State属性来判断服务器是否已连接: public bool IsConnceted { get { return _client.GetServer().State == MongoServerState.Connected; } } 但是,GetServer不是新API(2.0)的一部分。如何实现这一点?更合适的方法不是检查服务器,

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

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

这只会在集群启动时起作用,否则它会在某个时候抛出connectionTimeout异常。