2016-03-03 9 views
8

Bei früheren Version von C# Treiber (1.x) konnte ich tun:Shutdown MongoDB-Server mit C# Treiber 2.2.3

var client = new MongoClient(settings); 
var server = client.GetServer(); 
server.Shutdown(); 

Wie kann ich das mit Treiberversion 2.2.3?

aktualisieren

Nun, die beste, die ich finden konnte, ist so etwas wie dieses:

try 
{ 
    var client = new MongoClient(settings); 
    var adminDatabase = client.GetDatabase("admin"); 
    var cmd = new BsonDocument("shutdown", 1); 
    adminDatabase.RunCommand<BsonDocument>(cmd); 
} 
catch (MongoConnectionException e) 
{ 
    if (!(e.InnerException is EndOfStreamException)) 
    { 
     throw; 
    } 
} 

, aber ich nicht wirklich so, die Try/etc fangen ...

+0

Haben Sie versucht, dies mit 2.2.3 auszuführen? Ich bin mir sicher, dass Sie die Legacy-API mit der neuen API im selben Programm mischen können, da der 2.2.3-Treiber weiterhin fast die gesamte Legacy-API unterstützt. Siehe [API] (https://api.mongodb.org/csharp/2.2/html/Methods_T_MongoDB_Driver_MongoClient.htm). – chridam

+0

Ja, ich habe versucht, mit der 2.2.3 Legacy, aber es scheint, dass die Shutdown() -Methode nicht mit dieser Version –

+0

Es scheint, dass Sie die Admin-Datenbank auswählen müssen, und führen Sie die Methode TResult RunCommand (Befehl Befehl) mit der Befehlstext von "shutdown", aber ich kann keine Dokumentation finden, wie man den Befehlstext in Command umwandelt. –

Antwort

1

Sie sagten Ich an der Google Groups Page das ist, weil es nie von den meisten Anwendungen verwendet werden sollte.

Craig Wilson erwähnt, dass Shutdown ist einfach ein Befehl, die

db.RunCommand("{shutdown: 1}") 

So ist es nicht mehr in der API .NET Version 2.0.0 und höher mit senden kann.

0

Dies ist das Beste, was ich nach einer intensiven Suche heute finden konnte. Ich benutze den MongoDB C# Treiber 2.2. Es gibt keine speziellen Anmeldeinformationen für meine mongod-Instanz, es sind alle Standardeinstellungen. Ich könnte mir vorstellen, dass sich dieser Code ein wenig ändern würde, wenn es spezielle Anmeldedaten für die Admin-Datenbank gäbe.

// Connecting. 1 DB for actual usage, 1 for running the shutdown command 
Client = new MongoClient("mongodb://127.0.0.1:27017"); 
Database = Client.GetDatabase(DBName); 
AdminDatabase = Client.GetDatabase("admin"); 

// Shutting down the DB "cleanly" 
AdminDatabase.RunCommandAsync<BsonDocument>(new JsonCommand<BsonDocument>("{shutdown: 1}")); 

Von dem, was ich durch die Beobachtung der mongod Instanz in einer Eingabeaufforderung meiner Anwendung verbindet erfolgreich erklären kann, schreibt, liest, und dann mit dbexit: rc: 0 die mongod Instanz heruntergefahren, die von dem, was ich sage, bedeutet es Abschaltung korrekt, Ich erinnere mich schwach daran, dbexit: rc: 12 zu sehen, als ich auf diese Weise heruntergefahren war (frag nicht mal).

+0

Eigentlich, aus welchem ​​Grund auch immer, scheint dies nur einen Teil der Zeit zu funktionieren. Ich bin mir nicht sicher, was oder warum passiert, aber manchmal, wenn mongod auf diese Weise heruntergefahren wird, wird das Schloss nicht richtig freigegeben. Meine erste Vermutung ist, dass es heruntergefahren wird, während die andere 'Datenbank' beschäftigt ist, zu schreiben (die Sperre zu halten) und die Abschaltsequenz nicht darauf wartet, dass dies beendet wird? – KDecker

+0

Perhapse ist es, weil Sie das RunCommandAsync nicht erwarten? –

+0

Hmm ... Es ist definitiv einen Versuch wert. Möglicherweise ist es mein Problem, meine Verbindungen zur DB zu zerstören, bevor es vollständig heruntergefahren ist ... – KDecker