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
- Criar e armazenar o certificado em disco
- 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
Erro de conexão
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 sua connection string
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.
Configurar firewall
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.
Erro de autenticação
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.
Verifique sua connection string
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
Verificar as propriedades do MongoClientSettings
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.
Verificar se o usuário está no banco de dados de autenticação
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.
X. Erro de credencial 509
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 é gerado com a seguinte mensagem de erro:
No credentials are available in the security package
A seção a seguir descreve um método que pode ajudar a resolver o problema.
Criar e armazenar o certificado em disco
Use o seguinte código para gerar quaisquer certificados X.509
exigidos pelo seu aplicação:
using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key)) { return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12)); }
Erro ao enviar mensagem
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 as permissões do usuário
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.
Configurar firewall
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.
Verifique o número de conexões
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.
Muitas conexões abertas
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.
Verifique o número de conexões
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.
Erro de tempo limite
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.
Definir connectTimeoutMS
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.
Verifique o número de conexões
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.