Ho un servizio Windows che svolge una serie di attività periodiche e desidero modificare le impostazioni di questo servizio da un'app Windows Form . Non sono sicuro, tuttavia, del modo migliore per assicurarsi che il servizio abbia le preferenze utente più aggiornate al suo interno (con quale frequenza eseguire, quali cartelle utilizzare per le cose, qualsiasi altra cosa l'utente possa specificare). L'utente può modificare le impostazioni in qualsiasi momento, a proprio piacimento, e mi piacerebbe che il servizio venisse a conoscenza quasi immediatamente. Qui ci sono le opzioni che sto pesatura:Mantieni sincronizzate le impostazioni tra l'applicazione moduli e il servizio Windows (o qualsiasi altro livello)
- La quota modulo e il servizio utilizzare lo stesso oggetto "Impostazioni" da un terzo progetto, condiviso, e la forma utilizza un WCF "updatesettings (newSettings)" chiamata di lasciare che il il servizio sa che ci sono stati cambiamenti (o, opzionalmente, una chiamata per aggiornare ogni singola impostazione, anche se questo sembra molto su diverse chiamate). Attualmente utilizzo WCF per i messaggi di base, ma l'oggetto impostazioni può essere enorme, poiché ci sono molte altre cose lì
- Modulo e servizio utilizzano un file di configurazione comune (XML o lo stesso oggetto impostazioni dal n. 1, ma serializzato su disco). Il modulo scrive appena una nuova copia dell'oggetto dopo che è stato modificato e il servizio controlla ogni tanto e lo preleva se è nuovo, aggiornando la sua copia delle impostazioni
- Come il numero 2, ma con una chiamata WCF di base quello che dice al servizio di andare a prendere le impostazioni. Essenzialmente, una versione "on demand" anziché "polling" di # 2.
So che il meglio è soggettivo, ma sono interessato a qualsiasi ovvio motivo di pro o contro per queste scelte. Dato che dovrò salvare le mie impostazioni tra i runnings dell'applicazione (riavvii, ecc.), Dovrò comunque serializzare le impostazioni sul disco, quindi mi sto già orientando verso il 2 o il 3. Avrò bisogno di un posto sul disco dove posso salvare le impostazioni, ma forse la cartella AppData funzionerà correttamente, anche se questo consentirà agli amministratori di modificare le impostazioni, poiché sono le uniche ad avere il permesso di scrivere in questa posizione (dove ogni utente, incluso l'account di servizio, può leggerlo).
Grazie per l'intuizione!
L'utilizzo di "Archiviazione isolata" sembra essere specifico per l'utente: per quanto riguarda le mie impostazioni, sono essenzialmente per computer. Voglio che gli utenti siano in grado di visualizzarli, ma solo un amministratore può modificarli e ri-salvarli (o, con Vista/7, qualcuno che ha utilizzato l'elevazione admin). Posso utilizzare la memoria isolata per l'amministratore locale o la memoria di tipo "Tutti gli utenti"? – SqlRyan
@rwmnau Ulteriori letture nei tipi di archiviazione isolati Lo vedo come sempre limitato all'utente che lo ha creato. C'è una bandiera IsolatedStorageScope.User che pensavo potesse essere disattivata ma che non sembra essere il caso. Proverò a pensare a un percorso alternativo. – Matthew