2016-03-03 36 views
8

z poprzednią wersją C# kierowców (1.x) mogę zrobić:wyłączania serwera MongoDB z C# kierowcy 2.2.3

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

Jak mogę to zrobić z wersji sterownika 2.2.3?

Aktualizacja

Dobrze najlepiej udało mi się znaleźć coś takiego:

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

ale ja naprawdę nie tak jak tego, try/catch itp ...

+0

Czy próbowałeś uruchomić to z 2.2.3? Jestem pewien, że możesz mieszać ze starszym API z nowym API w tym samym programie, w którym sterownik 2.2.3 nadal obsługuje prawie wszystkie dotychczasowe API. Zobacz [API] (https://api.mongodb.org/csharp/2.2/html/Methods_T_MongoDB_Driver_MongoClient.htm). – chridam

+0

Tak Próbowałem ze starszą wersją 2.2.3, ale wygląda na to, że metoda Shutdown() nie istnieje w tej wersji –

+0

Wygląda na to, że musisz wybrać bazę danych Admin i uruchomić metodę TResult RunCommand (komenda ) z tekst polecenia "shutdown", ale nie mogę znaleźć żadnej dokumentacji, jak zmienić tekst polecenia w Command . –

Odpowiedz

1

Kazali mnie w Google Groups Page, ponieważ nie powinien nigdy być używany z większością aplikacji.

Craig Wilson wspomniał, że zamknięcie jest po prostu polecenia, które można wysłać za pomocą

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

Więc to nie jest już dostępny w wersji 2.0.0 .net API i powyżej.

0

To najlepsze, co mogłem znaleźć po intensywnych poszukiwaniach dzisiaj. Używam sterownika MongoDB C# 2.2. Nie ma specjalnych referencji do mojej instancji mongo, to wszystkie ustawienia domyślne. Wyobrażam sobie, że ten kod zmieni się nieco, jeśli istnieją specjalne dane logowania do administracyjnej bazy danych.

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

Z tego co mogę powiedzieć, obserwując mongod wystąpienie w wierszu polecenia moja aplikacja z powodzeniem łączy, pisze, czyta, a następnie wyłącza mongod instancję dbexit: rc: 0 który z tego co mogę powiedzieć, oznacza to zamknięcie poprawnie, I ledwie pamiętam, widząc dbexit: rc: 12 przy zamykaniu w ten sposób byłem wcześniej (nawet nie pytam).

+0

W rzeczywistości, z jakiegokolwiek powodu, wydaje się, że działa to tylko częściowo. Nie jestem pewien, co i dlaczego się dzieje, ale czasami, gdy mongodę zamyka się w ten sposób, nie zwalnia ona prawidłowo zamka. Moim pierwszym przypuszczeniem jest to, że jest on wyłączany, podczas gdy druga "Baza danych" jest zajęta pisaniem (trzymaniem zamka), a sekwencja zamykania nie czeka na zakończenie tej operacji? – KDecker

+0

Perhapse to dlatego, że nie oczekujesz 'RunCommandAsync? –

+0

Hmm ... To zdecydowanie warte strzału. Prawdopodobnie zniszczenie moich połączeń z DB przed całkowitym wyłączeniem jest moim problemem ... – KDecker