Je semble avoir un problème étrange: dans mon fichier global.asax de mon application Application_Start(), j'ai un élément qui part dans ma base de données et qui obtient tous les paramètres de mon application à partir d'un nom/table de valeur, puis les supprime dans l'application via Application.Add(name,value)
. J'ai une «façade d'application» dans un autre projet qui est utilisé par mes couches de service, couches de données et ainsi de suite afin d'obtenir les paramètres dont j'ai besoin pour faire divers morceaux.Problèmes de récupération des paramètres d'applications ajoutés lors du démarrage de l'application
Dans ma base de données, j'ai deux ou trois entrées:
ConfigName | ConfigValue
WebServiceUsername | myUsername
WebServicePassword | myPassword
Donc, dans ma méthode, je pars et obtenir ces valeurs de la base de données, et de les mettre dans mon application:
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);
}
}
Voilà comment j'appelle la valeur de l'application à une date ultérieure:
public static string WebServiceUsername
{
get { return WebConfigurationManager.AppSettings["WebServiceUsername"]; }
}
C'est là que ça devient bizarre .
Si j'appelle la façade de l'application de ma couche web avec ceci: (! Oui, je l'ai essayé à peu ConfigurationManager dans la méthode get)
<%= ApplicationFacade.WebServiceUsername %>
je reçois rien en retour.
Mais c'est la chose bizarre ...
Si je mets manuellement une clé d'application dans mon fichier web.config ...
<appSettings>
<add key="putz" value="mash"/>
</appSettings>
Et puis construire une propriété similaire dans ma classe ApplicationFacade comme Putz, quand je fais l'appel dans la vue (<%= ApplicationFacade.Putz %>
) je reçois 'mash
' retourné. Donc, je sais que mon ApplicationFacade fonctionne correctement. Alors peut-être que c'est mon code dans le fichier application_start()?
Eh bien, si je mets cela à mon avis <%=Application["WebServiceUsername"]%>
, myUsername
est retourné.
Que donne ?!
Réponse
ConfigurationManager.AppSettings.Set(appConfig.ConfigName,appConfig.ConfigValue);
Darin, Merci d'avoir dit ça. Je me sens un peu stupide maintenant. Cependant, comment puis-je accéder à l'objet Application depuis l'extérieur du projet Web? –
Vous ne pouvez pas. L'objet Application représente l'instance de votre application Web qui réside probablement dans un pool d'applications dans IIS, elle n'est donc accessible qu'à partir de l'application elle-même. AFAIK différents AppDomains/processus ne seront pas en mesure de lire/écrire sur cet objet. –
Merci d'avoir redressé ma stupidité! Je l'ai corrigé avec 'ConfigurationManager.AppSettings.Set (appConfig.ConfigName, appConfig.ConfigValue);' –