Quale sarebbe il modo migliore per mantenere le impostazioni modificabili dall'utente per un servizio Windows?

StackOverflow https://stackoverflow.com/questions/1202835

Domanda

Sto sviluppando un'applicazione che verrà implementata come Servizio Windows e mi chiedevo quale sarebbe il modo migliore per gestire le diverse impostazioni ( a livello di utente e applicazione). Il fatto è che non conosco completamente (ancora) tutte le opzioni disponibili, quindi in linea di principio preferisco il System.Configuration di .NET (ConfigurationManager.RefreshSection (" appSettings ") sembra allettante), anche se non riesco ancora a avvolgere la mia testa intorno all'intera immagine, vale a dire dove si trova il file app.config per un determinato servizio, ecc.

Quindi la mia domanda per voi ragazzi è: quale sarebbe il modo migliore per memorizzare i dettagli di configurazione modificabili dall'utente per un determinato servizio di Windows? Grazie a tutti in anticipo per il feedback.

È stato utile?

Soluzione

Hmmm ... impostazioni di configurazione 'modificabili dall'utente' per un servizio Windows ...

La cosa da tenere a mente è che il servizio Windows viene eseguito in background, quindi non ha un modo diretto per gli utenti di interagire con esso. Ciò che ho fatto per ovviare a questo è creare un'applicazione front-end separata che comunica con il servizio di Windows usando WCF. In questo modo, le impostazioni di configurazione "modificabili dall'utente" vengono mantenute come parte delle impostazioni dell'applicazione front-end, non del servizio Windows. Le impostazioni vengono semplicemente comunicate al servizio Windows utilizzando una serie di messaggi WCF man mano che l'utente li modifica.

Nel mio caso, ho anche aggiunto un NotifyIcon alla mia applicazione front-end e ho aggiunto la logica in modo che l'app possa essere rimossa dalla barra delle applicazioni quando è ridotta a icona. Funziona allo stesso modo di Task Manager quando si attiva l'opzione "Nascondi se ridotto a icona". Questo dà all'utente l'illusione di interagire direttamente con il servizio, anche se si tratta di due processi completamente indipendenti.

EDIT:

In risposta al tuo commento, WCF è semplicemente un'API di messaggistica. I messaggi sono generalmente definiti come classi decorate con gli attributi DataContract e DataMember. Gli attributi ServiceContract e OperationContract definiscono l'interfaccia del servizio WCF. Una volta definiti questi, creare e ospitare il servizio WCF all'interno del servizio Windows è semplice. E se hai Visual Studio 2008, la creazione del proxy sul lato client è un gioco da ragazzi in quanto VS2008 può automatizzarlo per te.

Al termine, l'app front-end crea semplicemente un'istanza del proxy sul lato client e richiama i metodi su quel proxy. Quando viene invocato ogni metodo, il framework WCF si occupa della serializzazione e dell'invio del messaggio al servizio WCF affinché agisca. Quindi serializza qualsiasi risposta, comprese le eccezioni, al proxy. Dal punto di vista del lato client, ad esempio l'app front-end, hai semplicemente invocato una funzione. Questa è la bellezza di WCF! È molto analogo alla programmazione dei socket, tranne per il fatto che non è necessario gestire le connessioni. WCF si occupa di tutto questo impianto idraulico per te.

Naturalmente, tutto ciò presuppone che tu possa almeno usare .NET 3.0. Se stai usando Visual Studio 2008, sei in buona forma. Ecco un paio di tutorial per aiutarti a iniziare:

Una volta che avrai i concetti di base giù, consiglierei di guardare il sito web di Juval Lowy . Ci sono molti download gratuiti relativi a WCF che trovo molto utili da guardare, anche se sono un po 'più avanzati. Comprendi i concetti WCF prima di approfondire troppo.

Ancora una volta, il punto è di aiutare i tuoi utenti a configurare vari aspetti del tuo servizio Windows. Se non fornisci una GUI front-end per farlo, non sono sicuro di come lo farebbero a meno di manipolare manualmente il file app.config stesso.

Spero che questo aiuti.

Altri suggerimenti

Se hai solo bisogno di un singolo dizionario nome / valore per memorizzare i parametri di configurazione, app.config è la risposta più semplice. Nella tua soluzione si chiama " app.config " ;, ma quando viene costruito viene rinominato come il nome dell'eseguibile + " .config " ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top