MongoDB C#Mono

MongoDB C#Mono,c#,mongodb,mono,C#,Mongodb,Mono,从c#连接时,我无法检查mongodb是否处于活动状态。下面的代码显示了我正在尝试做的事情。如果mongodb不可用,我期待出现异常。但是,即使mongodb未启用,代码也会毫无例外地运行。稍后,在尝试查询数据库时,代码将超时,出现任务异常 我的平台是OSX,Mono4.0.3,Xamarin,MongoDB驱动程序2.0.1 其他平台(如Windows)是否会引发异常 或者是否有其他方法验证数据库是否处于活动状态 最好的,胡 MongoClient=新的MongoClient(“mongodb

从c#连接时,我无法检查mongodb是否处于活动状态。下面的代码显示了我正在尝试做的事情。如果mongodb不可用,我期待出现异常。但是,即使mongodb未启用,代码也会毫无例外地运行。稍后,在尝试查询数据库时,代码将超时,出现任务异常

我的平台是OSX,Mono4.0.3,Xamarin,MongoDB驱动程序2.0.1

其他平台(如Windows)是否会引发异常

或者是否有其他方法验证数据库是否处于活动状态

最好的,胡

MongoClient=新的MongoClient(“mongodb://localhost:27017" );
尝试
{
IMongoDatabase db=client.GetDatabase(“clientservertest”);
//如果未连接,则应引发异常
m_collection=db.GetCollection(collection);
m_connected=true;
}
捕获(例外)
{
m_connected=false;
}
在抛出异常时,“monogodb//”样式的URI一直是个问题,请尝试在try/catch中获取数据库统计信息:

MongoClient client = new MongoClient( "mongodb://localhost:27017" );
try
{
    IMongoDatabase db = client.GetDatabase( "clientservertest" );
    try (
       db.GetStats();
       m_connected = true;
    catch (MongoConnectionException) {
       m_connected = false;
    }   
}
catch( Exception ) // Generic exception
{
    m_connected = false;
}

根据您使用的版本,您可以使用服务器Ping()方法。从您的客户端(var server=client.GetServer())获取服务器对象并ping它(server.ping())。

这似乎是旧的API。我现在使用的是2.0。不管怎样,我最终对数据库进行了ping操作。在我的例子中,mongodb运行在同一个盒子上,因此我等待答案的时间不会超过1秒

/// <summary>
/// Ping the specified db.
/// </summary>
private bool Ping( IMongoDatabase db )
{
    Console.WriteLine( "Checking mongodb connection..." );
    Task<BsonDocument> pingTask = db.RunCommandAsync<BsonDocument>( new BsonDocument( "ping", 1 ) );
    pingTask.Wait( 1000 ); // more than one second is way too much - db should be on same computer
    if( pingTask.IsCompleted )
    {
        Console.WriteLine( "...connection ok." );
        return true;
    }
    else
    {
        Console.WriteLine( "...connection FAILED." );
        return false;
    }
}
//
///Ping指定的数据库。
/// 
专用布尔平(IMONGODB数据库)
{
Console.WriteLine(“检查mongodb连接…”);
Task pingTask=db.RunCommandAsync(新的BsonDocument(“ping”,1));
pingTask.Wait(1000);//一秒钟以上太多了-数据库应该在同一台计算机上
如果(pingTask.IsCompleted)
{
Console.WriteLine(“…连接正常”);
返回true;
}
其他的
{
Console.WriteLine(“…连接失败”);
返回false;
}
}