Problemi nel recupero delle impostazioni dell'app aggiunte durante l'avvio dell'applicazione
-
21-09-2019 - |
Domanda
Sembra che io abbia uno strano problema in cui, nel mio global.asax nel mio Application_Start(), ho qualcosa che va nel mio database, ottiene tutte le impostazioni della mia app da una tabella nome/valore e poi le inserisce nella applicazione tramite Application.Add(name,value)
.
Ho una "facciata dell'applicazione" in un altro progetto che viene utilizzata dai miei livelli di servizio, livelli di dati e così via per ottenere le impostazioni di cui ho bisogno per eseguire varie parti.
Nel mio database ho un paio di voci:
ConfigName | ConfigValue
WebServiceUsername | myUsername
WebServicePassword | myPassword
Quindi, nel mio metodo, prendo questi valori dal database e li inserisco nella mia applicazione:
protected void GetApplicationSettings()
{
//Get all the config values out of the database, and then put them into the application keys...
var appConfigAttributes = ApplicationConfigurationService.GetAppConfigNames();
foreach (var appConfig in appConfigAttributes)
{
Application.Add(appConfig.ConfigName,appConfig.ConfigValue);
}
}
Ecco come chiamo il valore dall'applicazione in un secondo momento:
public static string WebServiceUsername
{
get { return WebConfigurationManager.AppSettings["WebServiceUsername"]; }
}
È qui che le cose si fanno strane.
Se chiamo la facciata dell'applicazione dal mio livello web con questo:
<%= ApplicationFacade.WebServiceUsername %>
Non ottengo nulla in cambio (sì, ho provato solo ConfigurationManager nel metodo get!).
Ma questa è la cosa strana...
Se inserisco manualmente una chiave di applicazione nel mio file web.config...
<appSettings>
<add key="putz" value="mash"/>
</appSettings>
E poi creo una proprietà simile nella mia classe ApplicationFacade come Putz, quando eseguo la chiamata nella vista (<%= ApplicationFacade.Putz %>
) Ottengo 'mash
'restituì.
Quindi, so che la mia ApplicationFacade funziona correttamente.Quindi forse è il mio codice in application_start()?
Bene, se lo metto dal mio punto di vista <%=Application["WebServiceUsername"]%>
, myUsername
viene restituito.
Cosa succede?!
Risposta
ConfigurationManager.AppSettings.Set(appConfig.ConfigName,appConfig.ConfigValue);
Soluzione
In Application_Start
quando ti riferisci a Application
oggetto di cui in realtà è un'istanza HttpApplicationState che viene utilizzato per conservare in memoria le impostazioni specifiche dell'applicazione e non ha nulla a che fare con appSettings chiave/valore archiviato in web.config.
- Quando usi
WebConfigurationManager.AppSettings["someKey"]
questo restituirà il valore corrispondente asomeKey
nelappSettings
sezione di web.config. - Quando usi
Application["someKey"]
questo restituirà un valore memorizzato nella cache nell'istanza dell'applicazione.
Entrambi sono completamente indipendenti e non puoi aspettarti di leggere i valori memorizzati in Application["someKey"]
con WebConfigurationManager.AppSettings["someKey"]
.