C# MongoServer.2.0驱动程序中的等效状态
在旧API(1.X)中,您可以通过使用从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)的一部分。如何实现这一点?更合适的方法不是检查服务器,
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异常。