Problemi nel recupero delle impostazioni dell'app aggiunte durante l'avvio dell'applicazione

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

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);
È stato utile?

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 a someKey nel appSettings 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"].

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