Menu Docs
Página inicial do Docs
/ / /
C#/.NET

Solução de problemas de conexão

Nesta página

  • Erro de conexão
  • Verifique sua connection string
  • Configurar firewall
  • Erro de autenticação
  • Verifique sua connection string
  • Verificar as propriedades do MongoClientSettings
  • Verificar se o usuário está no banco de dados de autenticação
  • X. Erro de credencial 509
  • Erro ao enviar mensagem
  • Verifique as permissões do usuário
  • Configurar firewall
  • Verifique o número de conexões
  • Muitas conexões abertas
  • Verifique o número de conexões
  • Erro de tempo limite
  • Definir connectTimeoutMS
  • Verifique o número de conexões

Esta página oferece soluções potenciais para problemas que você pode encontrar ao usar o driver MongoDB .NET/C# para se conectar a um sistema do MongoDB.

Observação

Esta página aborda apenas problemas de conexão. Se você encontrar qualquer outro problema com o MongoDB ou com o driver, acesse os seguintes recursos:

  • As Perguntas frequentes (FAQ) para o driver .NET/C#

  • A página Problemas e ajuda, que contém informações sobre como reportar bugs, contribuir com o driver e encontrar recursos adicionais

  • Os fóruns da MongoDB Community para perguntas, discussões ou suporte técnico geral

A seguinte mensagem de erro indica que o driver não pode se conectar a um servidor no nome de host ou porta especificada. Várias situações podem gerar essa mensagem de erro. Nesta mensagem de erro de exemplo, o nome do host é 127.0.0.1 e a porta é 27017:

Error: couldn't connect to server 127.0.0.1:27017

As seções a seguir descrevem ações que você pode adotar para resolver o problema.

Verifique se o nome do host e o número da porta na connection string são precisos. O valor de porta padrão para uma instância do MongoDB é 27017, mas você pode configurar o MongoDB para se comunicar em outra porta.

Verifique se as portas nas quais sua implantação MongoDB escuta não estão bloqueadas por um firewall na mesma rede. O MongoDB usa a porta 27017 por padrão. Para saber mais sobre as portas padrão que o MongoDB usa e como alterá-las, consulte Porta padrão do MongoDB.

Aviso

Não abra uma porta no firewall, a menos que tenha certeza de que é a porta usada pelo MongoDB deployment.

O driver .NET/C# pode não conseguir se conectar a uma instância do MongoDB se o mecanismo de autenticação não estiver configurado corretamente. Se você estiver usando SCRAM-SHA-256 ou SCRAM-SHA-1 para autenticação e o driver não conectar, o driver poderá gerar uma mensagem de erro semelhante a uma das seguintes mensagens:

Command failed with error 18 (AuthenticationFailed): 'Authentication
failed.' on server <hostname>:<port>.
Authentication failed","attr":{"mechanism":"SCRAM-SHA-256","principalName":
"<db_username>","<auth database>":"<db_username>","client":"127.0.0.1:2012",
"result":"UserNotFound: Could not find user}}
connection() error occurred during connection handshake: auth error:
sasl conversation error: unable to authenticate using mechanism
"SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.

As seções a seguir descrevem ações que você pode adotar para resolver o problema.

Uma connection string inválida é a causa mais comum de problemas de autenticação ao tentar conectar ao MongoDB utilizando connection strings e SCRAM-SHA-256 ou SCRAM-SHA-1.

Dica

Para obter mais informações sobre connection strings, consulte URI de conexão no Guia de conexão.

Se sua string de conexão contiver um nome de usuário e senha, certifique-se de que eles estejam no formato correto. Se o nome de usuário ou senha incluir qualquer um dos seguintes caracteres, eles devem usar codificação percentual:

: / ? # [ ] @

O exemplo abaixo mostra como codificar a porcentagem de "#MyPassword?":

Console.WriteLine(System.Web.HttpUtility.UrlEncode("#MyPassword?"));

Isso resulta na seguinte saída:

%23MyPassword%3F

Você pode utilizar um objeto MongoClientSettings para definir as configurações ao tentar conectar a uma deployment do MongoDB. Use a propriedade Credential para configurar informações de autenticação. Se as informações de credenciais não estiverem corretas, você receberá erros de autenticação ao tentar se conectar à sua deployment do MongoDB.

Para autenticar com êxito uma conexão usando um nome de usuário e uma senha com SCRAM-SHA-256 ou SCRAM-SHA-1, o nome de usuário deve ser definido no banco de dados de autenticação. O banco de dados de autenticação padrão é o banco de dados admin. Para usar outro banco de dados de autenticação, especifique a opção authSource na connection string. O exemplo a seguir orienta o driver a usar o users como banco de dados de autenticação:

using MongoDB.Driver;
// Connection URI
const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users";
// Create a new client and connect to the server
var client = new MongoClient(connectionUri);

Você também pode estabelecer definições de configuração criando um objeto MongoClientSettings e passando-o para o construtor MongoClient . Você pode utilizar a propriedade Credential para configurar as credenciais de login incluindo a especificação do banco de dados de autenticação. Para obter mais informações sobre o uso de MongoClientSettings, bem como alguns exemplos, consulte Uso de MongoClientSettings.

Você pode verificar se este é o problema tentando se conectar a uma instância do MongoDB hospedada na máquina local com o mesmo código. Um sistema na mesma máquina não exige qualquer autorização para se conectar.

Se você estiver usando o Windows como sistema operacional, poderá encontrar um problema no qual o driver .NET/C# não consegue localizar um certificado de autenticação X.509 na memória. Este erro exibe a seguinte mensagem de erro:

No credentials are available in the security package

Para resolver esse problema, adicione o seguinte código ao seu aplicação. Este código gera quaisquer certificados X.509 exigidos pelo seu aplicação e os armazena no disco:

using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key))
{
return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12));
}

Quando o driver não envia um comando após você fazer uma solicitação, ele pode exibir a seguinte mensagem de erro:

com.mongodb.MongoSocketWriteException: Exception sending message

As seções a seguir descrevem ações que você pode adotar para resolver o problema.

Verifique se você acessou o MongoDB deployment com o usuário correto. O termo "mensagem" no erro pode ser um comando enviado pelo driver. Se você estiver usando um usuário que não tem permissões para enviar o comando, o driver poderá gerar esse erro.

Certifique-se também de que o usuário tenha as permissões apropriadas para a mensagem que você está enviando. O MongoDB usa o RBAC (controle de acesso baseado em roles) para controlar o acesso a um MongoDB deployment. Para mais informações sobre como configurar o RBAC no MongoDB, consulte Controle de acesso baseado em funções.

O firewall precisa ter uma porta aberta para se comunicar com a instância do MongoDB. Para obter mais informações sobre como configurar o firewall, consulte Configurar firewall na seção Erro de conexão.

Cada instância do MongoClient aceita um número máximo de conexões abertas simultâneas em seu pool de conexões. Você pode configurar o parâmetro MaxConnectionPoolSize que define esse limite. O valor padrão é 100. Se já houver uma série de conexões abertas iguais a MaxConnectionPoolSize, o servidor aguardará até que uma conexão se torne disponível. Se esse tempo de espera exceder o valor de MaxConnectionIdleTime, o driver responderá com um erro.

Para obter mais informações sobre como funciona o pooling de conexões, consulte Como funciona o pooling de conexões no driver .NET/C#? na seção Perguntas frequentes.

O driver cria a seguinte mensagem de erro quando tenta abrir uma conexão, mas atingiu o número máximo de conexões:

connection refused because too many open connections

A seção a seguir descreve um método que pode ajudar a resolver o problema.

Se você precisar criar mais conexões abertas, aumente MaxConnectionPoolSize. Para obter mais informações sobre como verificar o número de conexões, consulte Verificar o número de conexões na seção Mensagem de envio de erro.

Quando a rede não é capaz de entregar uma solicitação do driver para o servidor com rapidez suficiente, ela pode expirar. Quando isso acontece, você pode receber uma mensagem de erro semelhante à seguinte:

timed out while checking out a connection from connection pool: context canceled

Se você receber esse erro, tente a seguinte ação para resolver o problema.

O driver pode travar quando não consegue estabelecer uma conexão porque o driver leva muito tempo tentando alcançar nós de conjuntos de réplicas inacessíveis. Você pode limitar o tempo que o driver gasta tentando estabelecer a conexão utilizando a configuração connectTimeMS. Para saber mais sobre essa configuração, consulte as Opções de tempo limite no manual do servidor.

Você deve garantir que a configuração do connectTimeoutMS não seja menor que a latência de rede mais alta que você tem para um nó do conjunto. Se um dos secundários tiver uma latência de 10.000 milissegundos, definir o connectTimeoutMS para 9.000 impede que o driver se conecte a esse nó.

Você pode definir esta opção na connection string. O exemplo abaixo define connectTimeoutMS em 10.000 milissegundos.

using MongoDB.Driver;
// Connection URI
const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?connectTimeoutMS=10000";
// Create a new client and connect to the server
var client = new MongoClient(connectionUri);

Você também pode estabelecer definições de configuração criando um objeto MongoClientSettings e passando-o para o construtor MongoClient . Para obter mais informações sobre o uso de MongoClientSettings, bem como alguns exemplos, consulte Usando MongoClientSettings.

O número de conexões com o servidor pode exceder MaxConnectionPoolSize. Para obter mais informações sobre como verificar o número de conexões, consulte Verificar o número de conexões na seção Mensagem de erro de envios.

Voltar

Perguntas frequentes