MongoDB C# Mono

本文关键字:Mono MongoDB | 更新日期: 2023-09-27 18:09:15

我在检查从c#连接时mongodb是否存在问题。下面的代码显示了我要做的事情。我期待一个例外,如果mongodb不可用。但是,即使mongodb没有打开,代码也会正常运行。之后,当试图查询数据库时,代码将超时并出现任务异常。

我的平台是OS X, Mono 4.0.3, Xamarin, MongoDB驱动2.0.1。

其他平台如Windows是否会抛出异常?

或者有其他方法来验证DB是活的吗?

最好,胡

MongoClient client = new MongoClient( "mongodb://localhost:27017" );
try
{
    IMongoDatabase db = client.GetDatabase( "clientservertest" ); 
    // Should throw exception if not connected
    m_collection = db.GetCollection<T>( collection );
    m_connected = true;
}
catch( Exception )
{
    m_connected = false;
}

MongoDB C# Mono

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

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

这似乎是旧的API。我现在使用2.0版本。不管怎样,我最后还是去了数据库。在我的情况下,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;
    }
}