5 votes

Problème de connexion à un ensemble de répliques en C# MongoDb

Selon le site Web de mongodb, je devrais pouvoir me connecter à un ensemble de répliques si je lui donne simplement un membre de l'ensemble de répliques :

"Le pilote C# est capable de se connecter à un ensemble de répliques même si la liste des semences est incomplète. Il trouvera le serveur primaire même s'il ne figure pas dans la liste d'ensemencement tant qu'au moins un des serveurs de la liste d'ensemencement répondra (la réponse contiendra l'ensemble complet de répliques et le nom du primaire actuel)." http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-Connectionstrings

Cependant, je n'arrive pas à faire en sorte que mon pilote se connecte si je lui donne simplement un membre secondaire.

Voici ma déclaration de connexion actuelle :

m_server = MongoServer.Create(new MongoServerSettings { ConnectionMode = ConnectionMode.ReplicaSet, Server = new MongoServerAddress(connection) });

La variable 'connexion' est : mongodb://servername/?safe=true

J'ai vu ça : https://jira.mongodb.org/browse/CSHARP-500 J'ai exécuté rs.status() et j'ai utilisé le nom correct du serveur. Toute aide est appréciée !

16voto

Alex Alvarez Points 181

En ce moment, j'apprends à connaître MongoDB et je m'amuse à établir des connexions par jeu de répliques. J'aimerais apporter ma contribution en proposant deux méthodes que j'ai utilisées pour me connecter à la base de données et que j'ai trouvées utiles. Si cela n'aide personne, j'aurai au moins un endroit auquel je pourrai me référer à l'avenir (je suis sûr que j'en aurai besoin à un moment donné). premièrement :

var connString = "mongodb://localhost:27029,localhost:27027,localhost:27028?connect=replicaSet";
var client = new MongoClient(connString);
var db = client.GetDatabase("test");

deuxième :

var settings = new MongoClientSettings
{
   Servers = new[]
   {
      new MongoServerAddress("localhost", 27027),
      new MongoServerAddress("localhost", 27028),
      new MongoServerAddress("localhost", 27029)
   },
   ConnectionMode = ConnectionMode.Automatic,
   ReplicaSetName = "m101",
   WriteConcern = new WriteConcern(WriteConcern.WValue.Parse("3"),wTimeout:TimeSpan.Parse("10"))
};
var client = new MongoClient(settings);

La première, me permet de me connecter à la base de données via les serveurs spécifiés dans la liste des serveurs. Cela permet au pilote de se connecter automatiquement au nouveau nœud principal du jeu de répliques en cas de défaillance du principal. Avec la seconde, j'envoie la liste des serveurs dans le replica set, le type de connexion. Le nom de l'ensemble de répliques, et la configuration du souci d'écriture. Avec cette configuration, je force le pilote à attendre un accusé de réception d'écriture des 3 serveurs du replica set (WValue:3) et à attendre au maximum 10 secondes pour la confirmation d'écriture.

5voto

Craig Wilson Points 4235

Ainsi, la variable de connexion est une chaîne de connexion complète, et non quelque chose à passer à MongoServerAddress. En outre, vous pouvez également spécifier le mode de connexion dans la chaîne de connexion. Essayez ceci :

connection = "mongodb://servername/?safe=true&connect=replicaset";
m_server = MongoServer.Create(connectionString);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X