Guia NoSQL e MongoDB

DevCast: Verificando a conexão no MongoDB com C#

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (5)  (0)

Neste DevCast veremos como tratar a exceção de Time Out do driver oficial do MongoDB para C#, a fim de verificar se o servidor está ou não disponível quando tentarmos realizar alguma operação de leitura e escrita.

Essa verificação é importante para evitar que o usuário receba erros de conexão não tratados, o que pode prejudicar sua experiência e comprometer o funcionamento da aplicação.

05:08

Seja um assinante MVP e acesse este conteúdo completo.

Consulta rápida:

Por padrão, o driver do MongoDB para C# não verifica o status da conexão com o servidor do banco de dados até que alguma operação de leitura ou escrita seja realizada. Devido a essa característica, é importante tratar as possíveis exceções que podem ser geradas ao tentar conectar, o que pode ser feito da seguinte forma:

01 try
02 {
03     var settings = new MongoClientSettings {
04         ServerSelectionTimeout = new TimeSpan(0,0,5),
05         Server = new MongoServerAddress("localhost", 27017)
06     };
07     
08     var client = new MongoClient(settings);
09 
10     var database = client.GetDatabase("loja");
11 
12     var colecao = database.GetCollection<Cliente>("colecao_teste");
13 
14     var filtro = Builders<Cliente>.Filter.Eq(c => c.Endereco.UF, "RJ");
15 
16     var clientes = colecao.Find(filtro).ToList();
17 }
18 catch (TimeoutException)
19 {
20     Console.WriteLine($"Erro: Não foi possível conectar ao servidor (time out após 5 segundos).");
21 }

Caso não seja possível estabelecer uma conexão com o MongoDB, o driver irá disparar uma exceção do tipo TimeOutException, que precisa ser tratada para que possamos exibir uma mensagem amigável para o usuário;

Na linha 4 configuramos o tempo de Time Out para 5 segundos, a fim de receber uma resposta mais rapidamente (o padrão é de 30s);

Na linha 16, quando a consulta for feita no banco por meio do método Find, a exceção será disparada;

Entre as linhas 18 e 21 tratamos a exceção e exibimos uma mensagem no console.

Outra alternativa:

01 try
02 {
03     var settings = new MongoClientSettings {
04         ServerSelectionTimeout = new TimeSpan(0,0,5),
05         Server = new MongoServerAddress("localhost", 27017)
06     };
07     
08     var client = new MongoClient(settings);
09 
10     var database = client.GetDatabase("loja");
11 
12     var comando = new BsonDocument("ping", 1);
13 
14     var resultado =  database.RunCommandAsync<BsonDocument>(comando).Result;
15 }
16 catch (Exception e)
17 {
18    if(e.InnerException != null && e.InnerException is TimeoutException)
19         Console.WriteLine($"Erro: Não foi possível conectar ao servidor.");
20 }

Outra alternativa para verificar a conexão é disparar um comando ping contra o servidor que, se não estiver ativo, fará com que a aplicação gere uma exceção;

Na linha 12 montamos o comando ping como um documento BSON, que é o formato utilizado pelo MongoDB;

Na linha 14 executamos o comando ping, que irá disparar a exceção;

Nessa abordagem será disparada uma Exception que na sua propriedade InnerException, a qual representa, de fato, o erro de time out.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?