Docs Menu
Docs Home
/ /

Solución de problemas de conexión

Esta página ofrece posibles soluciones a los problemas que puede encontrar al utilizar el controlador MongoDB .NET/C# para conectarse a una implementación de MongoDB.

Nota

Esta página solo aborda problemas de conexión. Si tiene algún otro problema con MongoDB o el controlador, visite los siguientes recursos:

  • El Página deproblemas y ayuda, que contiene información sobre cómo informar errores, contribuir al controlador y encontrar recursos adicionales

  • El MongoDB Etiqueta Stack Overflow o la comunidad MongoDB Reddit para preguntas, debates o soporte técnico general

El siguiente mensaje de error indica que el controlador no puede conectarse a un servidor en el nombre de host o puerto especificado. Este mensaje de error puede generarse en varias situaciones. En este mensaje de error de ejemplo, el nombre de host es 127.0.0.1 y el puerto es 27017:

Error: couldn't connect to server 127.0.0.1:27017

Las siguientes secciones describen las acciones que puede realizar para resolver potencialmente el problema.

Verifique que el nombre de host y el número de puerto en la cadena de conexión sean correctos. El valor de puerto predeterminado para una instancia de MongoDB es 27017, pero puede configurar MongoDB para que se comunique en otro puerto.

Verifique que los puertos que escucha su implementación de MongoDB no estén bloqueados por un firewall en la misma red. MongoDB usa el puerto 27017 por defecto. Para obtener más información sobre los puertos predeterminados que usa MongoDB y cómo cambiarlos, consulte Puerto predeterminado de MongoDB.

Advertencia

No abra un puerto en su firewall a menos que esté seguro de que es el puerto utilizado por su implementación de MongoDB.

El controlador .NET/C# puede fallar al conectarse a una instancia de MongoDB si el mecanismo de autenticación no está configurado correctamente. Si usa SCRAM-SHA-256 o SCRAM-SHA-1 para la autenticación y el controlador no se conecta, podría generar un mensaje de error similar a uno de los siguientes:

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.

Las siguientes secciones describen las acciones que puede realizar para resolver potencialmente el problema.

Una cadena de conexión no válida es la causa más común de problemas de autenticación al intentar conectarse a MongoDB utilizando cadenas de conexión y SCRAM-SHA-256 o SCRAM-SHA-1.

Tip

Para obtener más información sobre las cadenas de conexión,consulte URI de conexión en la Guía de conexión.

Si su cadena de conexión contiene un nombre de usuario y una contraseña, asegúrese de que tengan el formato correcto. Si el nombre de usuario o la contraseña incluyen alguno de los siguientes caracteres, deben estar codificados con un porcentaje:

: / ? # [ ] @

El siguiente ejemplo muestra cómo codificar porcentualmente "#MyPassword?":

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

Esto da como resultado el siguiente resultado:

%23MyPassword%3F

Puede usar un objeto MongoClientSettings para configurar los ajustes al intentar conectarse a una implementación de MongoDB. Puede usar la propiedad Credential para establecer la información de autenticación. Si la información de las credenciales es incorrecta, recibirá errores de autenticación al intentar conectarse a su implementación de MongoDB.

Para autenticar correctamente una conexión usando un nombre de usuario y una contraseña con SCRAM-SHA-256 o SCRAM-SHA-1, el nombre de usuario debe estar definido en la base de datos de autenticación. La base de datos de autenticación predeterminada es admin. Para usar una base de datos diferente para la autenticación, especifique la opción authSource en la cadena de conexión. El siguiente ejemplo indica al controlador que use users como base de datos de autenticación:

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);

También puede establecer la configuración creando un MongoClientSettings objeto y pasándolo al MongoClient constructor. Puede usar la Credential propiedad para establecer las credenciales de inicio de sesión, incluyendo la especificación de la base de datos de autenticación. Para obtener más información sobre el uso de MongoClientSettings y ver algunos ejemplos, consulte Uso de MongoClientSettings.

Puedes comprobar si este es el problema intentando conectarte a una instancia de MongoDB alojada en la máquina local con el mismo código. Una implementación en la misma máquina no requiere ninguna autorización para conectarse.

Si usa Windows como sistema operativo, podría experimentar un problema en el que el controlador .NET/C# no puede localizar un certificado de autenticación X.509 en la memoria. Este error muestra el siguiente mensaje:

No credentials are available in the security package

Para resolver este problema, agregue el siguiente código a su aplicación. Este código genera los certificados X.509 que requiere su aplicación y los almacena en el disco:

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

Cuando el controlador no puede enviar un comando después de realizar una solicitud, puede mostrar el siguiente mensaje de error:

com.mongodb.MongoSocketWriteException: Exception sending message

Las siguientes secciones describen las acciones que puede realizar para resolver potencialmente el problema.

Verifique que haya accedido a la implementación de MongoDB con el usuario correcto. El término "mensaje" en el error puede ser un comando enviado por el controlador. Si utiliza un usuario sin permisos para enviar el comando, el controlador podría generar este error.

También asegúrate de que el usuario tenga los permisos adecuados para el mensaje que estás enviando. MongoDB utiliza el control de acceso basado en roles (RBAC) para controlar el acceso a una implementación de MongoDB. Para obtener más información sobre cómo configurar RBAC en MongoDB, consulta Control de acceso basado en roles.

El firewall debe tener un puerto abierto para comunicarse con la instancia de MongoDB. Para obtener más información sobre la configuración del firewall,consulte "Configurar el firewall" en la sección "Error de conexión".

Cada instancia de MongoClient admite un número máximo de conexiones simultáneas abiertas en su pool de conexiones. Se puede configurar el parámetro MaxConnectionPoolSize que define este límite. El valor por defecto es 100. Si ya hay un número de conexiones abiertas igual a MaxConnectionPoolSize, el servidor espera hasta que una conexión esté disponible. Si este tiempo de espera supera el valor de MaxConnectionIdleTime, el controlador responde con un error.

Para obtener más información sobre cómo funciona la agrupación de conexiones, consulte ¿Cómo funciona la agrupación de conexiones en el controlador .NET/C#? en las preguntas frecuentes.

El controlador crea el siguiente mensaje de error cuando intenta abrir una conexión, pero ha alcanzado el número máximo de conexiones:

connection refused because too many open connections

La siguiente sección describe un método que puede ayudar a resolver el problema.

Si necesita crear más conexiones abiertas,MaxConnectionPoolSize aumente. Para obtener más información sobre cómo comprobar el número de conexiones, consulte la sección "Comprobar el número de conexiones" en la sección "Mensaje de error al enviar".

Cuando la red no puede entregar una solicitud del controlador al servidor con la suficiente rapidez, puede producirse un tiempo de espera. En este caso, podría recibir un mensaje de error similar al siguiente:

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

Si recibe este error, intente la siguiente acción para resolver el problema.

El controlador puede bloquearse si no puede establecer una conexión porque tarda demasiado en alcanzar nodos del conjunto de réplicas inaccesibles. Puede limitar el tiempo que el controlador tarda en establecer la conexión mediante la connectTimeMS configuración. Para obtener más información sobre esta configuración, consulte las Opciones de tiempo de espera en el manual del servidor.

Asegúrese de que el valor connectTimeoutMS no sea inferior a la latencia de red máxima que tenga con un miembro del conjunto. Si uno de los miembros secundarios tiene una latencia de 10000 milisegundos, establecer connectTimeoutMS en 9000 impide que el controlador se conecte a ese miembro.

Puede configurar esta opción en la cadena de conexión. El siguiente ejemplo establece connectTimeoutMS en 10000 milisegundos.

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);

También puede establecer la configuración creando un MongoClientSettings objeto y pasándolo al MongoClient constructor. Para obtener más información sobre el uso de MongoClientSettings y ver algunos ejemplos, consulte Uso de MongoClientSettings.

El número de conexiones al servidor puede MaxConnectionPoolSize superar. Para obtener más información sobre cómo comprobar el número de conexiones, consulte la sección "Comprobar el número de conexiones en el mensaje de error al enviar".

Volver

Pools de conexiones