J'aime mettre à jour les clés / valeurs définies dans J'ai une énorme application Web qui consiste en plusieurs modules, DLL et fichiers de code source. Un groupe d'informations critiques variées à partir de la configuration de la base de données, des touches de cryptage, du nom d'utilisateur et des mots de passe pour WebServices sont enregistrées dans J'ai déjà fixé ces valeurs dans un endroit externe et je peux les lire en arrière Lorsque l'application commence. p> voici le code de l'échantillon. p> global.asax strong> p> appsettings code> section de
web.config code> au moment de l'exécution. Cependant, je ne veux pas les enregistrer à
web.config code> fichier.
appSetTotings code> du fichier
web.config code>. Exigence récente du projet a besoin de déplacer ces valeurs de
web.config code> et de conserver dans un stockage sécurisé. P>
public class Global: System.Web.HttpApplication {
protected void Application_Start(object sender, EventArgs e) {
Dictionary<string, string> secureConfig = new Dictionary<string,string>{};
// --------------------------------------------------------------------
// Here I read and decrypt keys and add them to secureConfig dictionary
// To test assume the following line is a key stored in secure sotrage.
//secureConfig = SecureConfig.LoadConfig();
secureConfig.Add("ACriticalKey","VeryCriticalValue");
// --------------------------------------------------------------------
foreach (KeyValuePair<string, string> item in secureConfig) {
ConfigurationManager.AppSettings.Add(item.Key, item.Value);
}
}
}
4 Réponses :
Peut-être Ce lien aidera. Il fait référence à 2.0 mais je crois que la méthode est toujours valide dans 4.0. P>
Aussi, la question de la même question sur le même sujet / similaire Ici peut être d'intérêt. P>
En outre, la modification du web.config au moment de l'exécution doit provoquer un recyclage d'un pool d'applications à chaque fois. N'essayez pas de vous dire comment sucer des œufs, pensez-vous que je le ferais noter pour l'intérêt prospectif de quiconque ... merci. P>
Merci de votre réponse, mais les articles suggèrent ici, enregistrant également les valeurs du fichier de configuration (qui n'est pas possible en raison du niveau de protection des IIS, sauf modification de la machine.config). Vous avez raison de modifier le web.config code> recycle le pool d'applications qui n'est pas destiné non plus.
Afaik je ne pense pas que tu peux alors. Je pense que la seule façon serait d'ajouter une autre couche de Indirection en créant une classe SecureConFigurationManager avec une propriété AppSettings qui peut être appelée simplement comme des applications de configurationManager (par exemple, SecureConFigurationManager.appssets [] code>) mais a la logique pour vérifier votre dictionnaire d'abord et tomber à
ConfigurationManager.appsettings [] Code> S'il ne le trouve pas (ou vice versa). Je note que c'est un changement de code (pas ce que vous êtes après) mais peut-être un impact faible
Cela signifierait que vos développeurs ne remarqueraient pas si le paramètre provenait de appsettings code> dans le web.config ou non et pourrait toujours mettre des choses avec bonheur et que votre wrapper comptait en compte le temps de production lorsque les paramètres ne sont pas là. Cependant, je suis probablement allé de parler si s'il vous plaît, vous nourrissez-moi si ce n'est pas ce que vous êtes après - et si ce n'est pas, je ne vais pas supprimer cette réponse parce que cela n'ajoute rien à votre question. Désolé je ne peux pas être d'aide plus d'aide.
En fait, votre réponse a été utile. Le premier lien que vous avez partagé a été renvoyé à un autre article sur la modification de la classe ConfigurationManager CODE> pour lire les paramètres d'un autre endroit. Je regarde cet article maintenant et je posterai mes conclusions si cela réussit ici.
Vous devez utiliser webconfigurationmanager.openwebconfiguration () code>
Merci pour votre réponse, mais je ne veux pas enregistrer des valeurs dans le fichier web.config. D'autre part, avec des paramètres IIS, ce code ne fonctionnera pas non plus comme web.config est réadon, sauf si vous modifiez machine.Config, qui n'est pas autorisé dans les serveurs partagés
Merci à NKVU qui m'a dirigé vers un lien de son premier lien qui m'a envoyé à Le blog postal mentionné couvre comment lire les paramètres d'un autre fichier XML et fonctionne avec les applications Windowed et les applications Web (avec une petite modification dans le nom de fichier et le chemin de configuration). Bien que ce blog écrit en 2010, cela fonctionne toujours bien avec .NET4 sans problème. P> Cependant, car j'allais lire ma configuration à partir d'un périphérique sécurisé, j'ai simplifié la classe et comment utiliser les classes fournies par williadob p> pour installer cette (ou version originale de la demande de configuration) Ajouter ligne suivante à
votre global. Classe (global.asax.cs) dans application_start p> comme ci-dessous: p>
Je sais que c'est une ancienne question, mais j'ai rencontré le même problème et j'ai constaté que l'ensemble fonctionne de la même manière que l'ajout et ne jette pas une exception, il suffit donc de remplacer Ajouter avec ensemble, comme:
ConfigurationManager.AppSettings.Set(item.Key, item.Value);
Je sais que cette question est ancienne, mais je voulais faire référence à une réponse que je viens de poster concernant le même problème. Stackoverflow.com/a/37657895/462121