Ja. Wenn Ihre Anwendung Dateien im Anwendungsordner ändern darf - Update *.config
Datei, durch Datei-IO-Operationen oder indem Sie "Abschnitt update
/save
/refresh
". In dieser Lösung gibt es eine direkte Logik - Sie möchten eine Remote-Konfiguration haben? Holen Sie es von Remote, lokal aktualisieren und haben es.
Probe: auf „Überlast“ conf Konfiguration lassen sagen Sie Ihren wcf Abschnitt der Gruppe gespeichert haben (<bindings>
, <behaviors>
.. etc) in der Datei wcfsections.test.config
(natürlich jede entfernte Quelle ist möglich) und wollen. Der Konfigurationsaktualisierungs-/Speicher-/Aktualisierungscode sieht dann wie folgt aus:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionCollection sections = ServiceModelSectionGroup.GetSectionGroup(config).Sections;
sections.Clear();
string fileName = ((GeneralSettings)ConfigurationManager.GetSection("generalSettings")).AppConfigServiceModelSectionFile;
XDocument doc = XDocument.Load(fileName);
var xmlGroup = (from x in doc.Descendants("system.serviceModel") select x).FirstOrDefault();
string[] sectionsInUpdateOrder = { "bindings", "comContracts", "behaviors", "extensions", "services", "serviceHostingEnvironment", "client", "diagnostics" };
foreach (string key in sectionsInUpdateOrder)
{
var e = (from x in xmlGroup.Elements(key) select x).FirstOrDefault();
if (e != null)
{
ConfigurationSection currentSection = sections[e.Name.LocalName];
string xml = e.ToString();
currentSection.SectionInformation.SetRawXml(xml);
}
}
config.Save();
foreach (string key in sectionsInUpdateOrder)
ConfigurationManager.RefreshSection("system.serviceModel/" + key);
Hinweis: Die Aktualisierungsreihenfolge ist wichtig für das Subsystem zur Validierung von wcf. Wenn Sie es in falscher Reihenfolge aktualisieren, können Sie Validierungsausnahmen erhalten.
Manchmal "Nein" ist die richtige Antwort :-) –
Ein Auszug von http://msdn.microsoft.com/en-us/library/system.configuration.configuration.aspx veranschaulicht die Notwendigkeit für einen "physischen" Pfad : "Die Konfigurationsklasseninstanz stellt die zusammengeführte Ansicht der Konfigurationseinstellungen aus allen Konfigurationsdateien dar, die für eine bestimmte physische Entität gelten" –