Le rechargement de la configuration sans redémarrage de l'application à l'aide de ConfigurationManager.RefreshSection
Quelqu'un a eu ce travail dans une application web?
Peu importe ce que je fais, il semble que ma section appSettings (redirigé depuis web.config à l'aide de appSettings fichier=".\Site\Site.config") n'est pas rechargé.
Suis-je condamné pour le cas d'avoir à juste redémarrer l'application? J'espérais que cette méthode m'a conduit à un plus performant solution.
Mise à jour:
Par "rechargement", je veux dire rafraîchissante ConfigurationManager.AppSettings sans avoir à redémarrer complètement mon ASP.NET application et d'avoir à subir l'habitude de démarrage temps de latence.
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que vous êtes de passage le bon sensible à la casse de la valeur à RefreshSection, c'est à dire
Ce qui semble être un défaut (peut-être un bug) lorsque l'aide d'un fichier de configuration de votre appSettings. Je l'ai essayé à l'aide de la configSource attribut et RefreshSection simplement ne fonctionne jamais, je suppose que c'est la même lors de l'utilisation de l'attribut de fichier.
Si vous déplacez votre appSettings de retour à l'intérieur de votre site web.config RefreshSection fonctionne parfaitement mais sinon j'ai peur, vous êtes condamné.
Pour quelque raison
ConfigurationManager.RefreshSection("appSettings")
ne fonctionnait pas pour moi. Le rechargement de la Web.Config dans un objet de Configuration semble fonctionner correctement. Le code suivant suppose le Web.Fichier de configuration est un répertoire sous le répertoire d'exécution (bin) dossier.Et est utilisé comme:
Comme alternative, vous pouvez écrire votre propre
ConfigSection
et définirrestartOnExternalChanges="false"
.Puis, lors de la lecture de la section avec
ConfigurationManager.GetSection("yourSection")
les paramètres seront auto-actualisé sans un redémarrage de l'application.Et vous pourriez mettre en œuvre vos paramètres fortement typé ou NameValueCollection.
.RefreshSection() ne fonctionne pas lorsque le appSettings est externe.
Toutefois, vous pouvez utiliser les méthodes suivantes pour modifier une valeur:
Cela ne va PAS changer le réglage sur fichier, seul le chargé de la valeur dans la mémoire.
Donc, au lieu d'utiliser RefreshSection je n'ai suivantes:
Tous les appels suivants de AppSettings.Obtenir contiendra la valeur mise à jour.
AppSettings sera ensuite mis à jour sans avoir besoin de redémarrer l'application.
Oui. vous êtes coincé avec iis redémarrage.
Il y a une fonctionnalité avec asp.net 4.0 et iis 7.5 où le démarrage initial est supprimé.
Je ne suis pas sûr si cela est possible dans une application web, mais il fonctionne dans une application de bureau. Essayez d'utiliser ConfigurationSettings plutôt que ConfigurationManager (il va hurler à vous pour l'aide de vieux classes...), puis la lecture de toutes les données dans une classe. Lorsque vous souhaitez vous rafraîchir, il suffit de créer une nouvelle instance et d'abandonner toutes les références à l'ancienne instance. Ma théorie pour expliquer pourquoi cela fonctionne (peut être mal): lorsque vous n'avez pas directement accès à l'application.fichier de configuration le temps que vous êtes en cours d'exécution, le verrouillage de fichier est déposé par l'application. Ensuite, les modifications peuvent être faites lorsque vous n'êtes pas accéder au fichier.
L'Application.Paramètres de configuration sont mis en cache dans la mémoire lors du démarrage de l'application. Pour cette raison, je ne pense pas que vous serez en mesure de modifier ces paramètres sans avoir à redémarrer votre application. Une solution qui devrait être assez simple serait de créer un simple fichier de configuration XML, et la poignée de chargement/cache/rechargement de vous-même.
SectionInformation.RestartOnExternalChanges
) EDIT: viens de remarquer que Meixger a déjà suggéré cetteÀ écrire, de l'appeler de cette façon:
Dim config Comme Système.La Configuration.Configuration = Système.Web.La Configuration.WebConfigurationManager.OpenWebConfiguration("~")
Retour AddOrUpdateAppSetting(config, "YourSettingKey", "YourValueForTheKey")
À lire et vous assurer d'obtenir les valeurs dans le fichier, au lieu de celles de cache, de lire de cette façon:
Exemple complet:
Avez-vous essayé le stockage de vos AppSettings dans son propre fichier externe?
À partir de l'app.config/web.config:
appSettings.config:
Les modifications apportées à appSettings.config devrait être reflété instantanément.
Plus d'infos:
http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx