2016-03-03 14 views
8

Con la versione precedente del driver # C (1.x) ho potuto fare:Shutdown con C# conducente 2.2.3

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

Come posso fare questo con il driver versione 2.2.3?

Aggiornamento

Beh, la migliore che ho trovato è qualcosa di simile:

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

ma io non piace molto questo, il try/catch ecc ...

+0

Hai provato a farlo con 2.2.3? Sono sicuro che è possibile combinare l'API legacy con la nuova API nello stesso programma in cui il driver 2.2.3 continua a supportare quasi tutte le API legacy. Fare riferimento a [API] (https://api.mongodb.org/csharp/2.2/html/Methods_T_MongoDB_Driver_MongoClient.htm). – chridam

+0

Sì, ho provato con il 2.2.3 legacy ma sembra che il metodo Shutdown() non esista con questa versione –

+0

Sembra che sia necessario selezionare il database Admin ed eseguire il metodo TResult RunCommand (Comando ) con il testo del comando di "shutdown", ma non riesco a trovare alcuna documentazione su come trasformare il comando testo in Command . –

risposta

1

hanno detto me allo Google Groups Page è perché non dovrebbe mai essere usato dalla maggior parte delle applicazioni.

Craig Wilson hanno detto che l'arresto è semplicemente un comando che può essere Invia utilizzando

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

quindi non è più disponibile nelle API .NET versione 2.0.0 e superiori.

0

Questo è il meglio che ho potuto trovare dopo una ricerca intensiva oggi. Sto usando il driver MongoDB C# 2.2. Non ci sono credenziali speciali per la mia istanza mongod, sono tutte le impostazioni predefinite. Immagino che questo codice cambierebbe un po 'se ci sono speciali credenziali di accesso per il database di amministrazione.

// 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}")); 

Da quello che posso dire guardando l'istanza mongod in un prompt dei comandi la mia applicazione si connette con successo, scrive, legge, quindi si spegne l'istanza mongod con dbexit: rc: 0 che, da quello che posso dire significa che l'arresto correttamente, Ricordo vagamente di aver visto dbexit: rc: 12 quando mi sono fermato in quel modo che ero prima (non chiedere nemmeno).

+0

In realtà, per qualsiasi motivo, sembra funzionare solo in parte del tempo. Non sono sicuro di cosa o perché stia succedendo, ma a volte quando mongod viene arrestato in questo modo non rilascia correttamente il blocco. La mia prima ipotesi è che è in fase di spegnimento mentre l'altro 'Database 'è impegnato a scrivere (tenendo premuto il lucchetto) e la sequenza di spegnimento non aspetta che questo finisca? – KDecker

+0

Perhapse è perché non si attende il RunCommandAsync? –

+0

Hmm ... Ne vale sicuramente la pena. Probabilmente distruggendo le mie connessioni al DB prima che si spenga completamente è il mio problema ... – KDecker

Problemi correlati