2012-11-14 15 views
11

Sto sviluppando un'applicazione che dovrebbe essere portatile e sto usando mongodb.Mongodb in un'app portatile C#

Con il portatile, significa che la mia app ha una cartella con tutti i file: dll, exes, file mongo, database mongo. Quindi con questa cartella posso eseguire la mia app su qualsiasi macchina.

Poi ho bisogno di sapere:

  • C'è qualche libreria che mi permetta di eseguire il processo mongod quando l'applicazione inizia e finisce il processo quando le estremità app?

  • Esiste una buona pratica per fare quella roba?

I consigli sono benvenuti e grazie in anticipo.

+0

È possibile definire ulteriormente "portatile"? Quali sono i tuoi requisiti? –

+0

@ csharptest.net Modifica la domanda con il mezzo del portatile –

risposta

9

Secondo le istruzioni di installazione di MongoDb, dovrebbe essere abbastanza semplice.

Mongodb si avvia come un'applicazione console in attesa di connessioni, quindi all'avvio dell'app, è necessario eseguire mongodb hidden. Supponiamo sempre che TUTTI i file mongodb siano installati con i file dell'applicazione e che i file di database siano nella directory corretta).

Quando l'app termina, è necessario interrompere la procedura.

Yo dovrebbe impostare i percorsi corretti in questo esempio:

//starting the mongod server (when app starts) 
ProcessStartInfo start = new ProcessStartInfo();  
start.FileName = dir + @"\mongod.exe"; 
start.WindowStyle = ProcessWindowStyle.Hidden; 

start.Arguments = "--dbpath d:\test\mongodb\data"; 

Process mongod = Process.Start(start); 

//stopping the mongod server (when app is closing) 
mongod.Kill(); 

È possibile visualizzare ulteriori informazioni sulla configurazione mongod e funzionante here

8

avevo bisogno di fare la stessa cosa e il mio punto di partenza è stato Salvador La risposta di Sarpi. Ma ho trovato un paio di cose che dovevano essere aggiunte al suo esempio.

Prima di tutto, è necessario impostare UseShellExecute su false per l'oggetto ProcessStartInfo. In caso contrario, è possibile che venga visualizzato un avviso di sicurezza all'avvio del processo chiedendo all'utente se desidera eseguirlo o meno. Non penso che questo sia desiderato.

In secondo luogo, è necessario chiamare Shutdown sull'oggetto MongoServer prima di uccidere il processo. Ho avuto un problema in cui ha bloccato il database e ha richiesto che fosse riparato se non avessi chiamato il metodo Shutdown prima di uccidere il processo. See Here for details on repairing

Il mio codice finale è diverso, ma per questo esempio ho usato il codice di Salvador come base di riferimento.

//starting the mongod server (when app starts) 
ProcessStartInfo start = new ProcessStartInfo();  
start.FileName = dir + @"\mongod.exe"; 
start.WindowStyle = ProcessWindowStyle.Hidden; 
// set UseShellExecute to false 
start.UseShellExecute = false; 

//@"" prevents need for backslashes 
start.Arguments = @"--dbpath d:\test\mongodb\data"; 

Process mongod = Process.Start(start); 

// Mongo CSharp Driver Code (see Mongo docs) 
MongoClient client = new MongoClient(); 
MongoServer server = client.GetServer(); 
MongoDatabase database = server.GetDatabase("Database_Name_Here"); 

// Doing awesome stuff here ... 

// Shutdown Server when done. 
server.Shutdown(); 

//stopping the mongod server (when app is closing) 
mongod.Kill(); 
+0

I * penso * occorrono doppi backslash su stringhe C#. –

+0

+1 Eccellente! Grazie. –