Domanda

Sto cercando dei modi per rendere la nostra applicazione più estensibile e più facile da manipolare senza dover modificare il file web.config (o, nel nostro caso, application.config, che contiene il nodo appsettings).

Un modo a cui ho pensato è mantenere le impostazioni dell'app nella tabella del database che ha una sqlcachedependancy. Ciò significa che:

  • Ogni volta che un'impostazione viene modificata nel database, la cache viene invalidata e le impostazioni vengono nuovamente recuperate, aggiornando così l'applicazione in tempo reale senza dover modificare i file e riavviare l'intera app.
  • Siamo in grado di creare uno strumento personalizzato che ci consente di modificare le impostazioni.

Gli svantaggi a mio avviso sono che ciò può causare seri problemi logici in quanto, se si dispone di qualcosa che controlla un'impostazione iniziale all'inizio di un processo e poi cambia a metà strada, si potrebbe finire per alterare involontariamente il processo flusso, poiché il requisito per un riavvio completo dell'applicazione viene negato.

C'è un modo per aggirare questo?

Esiste un modo migliore per gestire le impostazioni delle app, in modo da poterle modificare al volo da remoto per uno, più o tutti i server in una volta sola?

È stato utile?

Soluzione

Penso che tu abbia inchiodato i due principali attori:

  • o hai accesso al file system e metti tutte le tue impostazioni in una pletora di file * .config lì

O:

  • non hai accesso (o solo un accesso molto limitato) al file system del server e quindi probabilmente stai meglio inserendo le impostazioni di configurazione e le preferenze dell'utente in un database, praticamente non lasciando altro che la stringa di connessione al file di configurazione su disco

Entrambi gli approcci hanno i loro pro e contro. Sto provando da molto tempo a trovare un modo per "materializzare" una sezione di configurazione da un campo di database, in modo che potrei praticamente usare semplicemente l'XML di configurazione, ma memorizzato in un campo di database. Sfortunatamente, l'intero sistema di configurazione di .NET 2.0 è molto "bloccato". e presume solo che i dati provengano da file - non c'è modo di collegare ad es. un fornitore di database per consentire al sistema di configurazione di leggere i suoi contenuti da un campo di database :-( Davvero troppo male!

L'unico altro approccio che ho visto è un " ConfigurationService " nella app di esempio StockTrader 2.0 fornita da Microsoft, ma per le mie esigenze , sembrava eccessivo e come un sottosistema davvero complesso e molto pesante.

Altri suggerimenti

potresti usare SQLite, che sarà un DB indipendente in un singolo file. Due uccelli con una fava?

Se fai riferimento a un file di configurazione esterno che contiene le impostazioni (lasciando tutto il resto nella normale app.config), credo che modificarlo ricarichi solo quelle impostazioni, non forzerà il riavvio dell'intera app.

C'è una domanda simile sull'argomento qui: File n.config (web.config) nidificati

WRT il problema dei valori che cambiano nel mezzo dell'esecuzione del programma, immagino che potresti memorizzare localmente i valori nella cache e generare un evento quando cambiano, consentendo alle routine di raggiungere un punto adatto prima di utilizzare i valori aggiornati.

Penso che in asp.net lo riusciamo a ottenere gratuitamente perché ogni stile di vita della pagina è distinto, quindi il valore viene semplicemente applicato solo alle richieste di nuove pagine, non durante un'esecuzione.

Modifica: alcune informazioni extra:

Le modifiche alla configurazione provocano un riavvio del dominio applicazione

Da MSDN :

  

Le modifiche alle impostazioni di configurazione nei file Web.config provocano il riavvio indiretto del dominio dell'applicazione. Questo comportamento si verifica in base alla progettazione. Se lo si desidera, è possibile utilizzare l'attributo configSource per fare riferimento a file di configurazione esterni che non causano un riavvio. Per ulteriori informazioni, vedere configSource in Attributi generali Ereditati da Elements Section.

Ulteriori informazioni sulla classe ConfigurationManager in lo Spazio dei nomi System.Configuration che potrebbe essere utilizzato per modificare il configura i file a livello di codice (ovvero in uno strumento personalizzato, se è possibile fornire autorizzazioni di lettura del disco pertinenti). Se continui a utilizzare le classi di configurazione integrate, penso che cambiare le configurazioni esterne, non causerebbe il riavvio dell'applicazione, ma genererebbe eventi (come proprietà modificata ) che è possibile gestire, per garantire che il codice non venga intercettato modificando le impostazioni.

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