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