Frage

ich nach Wegen suchen unsere Anwendung dehnbarer und leichter zu manipulieren, ohne die web.config (oder in unserem Fall application.config Dateien, die den appsettings Knoten enthalten) ändern zu müssen.

Ein Weg, dachte ich haben über, um die App-Einstellungen in der Datenbanktabelle zu halten, die eine sqlcachedependancy hat. Dies bedeutet, dass:

  • Jedes Mal, wenn eine Einstellung in der Datenbank geändert wird, wird der Cache für ungültig erklärt, und die Einstellungen wieder abgerufen werden, so dass die Anwendung in Echtzeit zu aktualisieren, ohne die Dateien ändern zu müssen und starten Sie den gesamten App.
  • Wir können ein benutzerdefiniertes Werkzeug schaffen, die uns die Einstellungen zu verändern, erlaubt.

Die Nachteile wie ich es sehe, dass dies ernsthafte Logik Probleme, dass verursachen kann, wenn Sie etwas haben, das eine Appsetting zu Beginn eines Prozesses überprüft, und es ändert sich dann auf halbem Wege durch, könnten Sie unbeabsichtigt beenden den Prozess zu verändern fließen, da die Voraussetzung für einen vollständigen Neustart der Anwendung negiert wird.

Gibt es eine Möglichkeit runden das?

Gibt es eine bessere Art und Weise appsettings zu verwalten, so dass Sie sie schnell fern für einen verändern können, mehrere oder alle Server in einem Rutsch?

War es hilfreich?

Lösung

Ich denke, man die beiden großen Spieler genagelt haben:

  • Sie entweder Zugriff auf das Dateisystem haben, und Sie setzen alle Ihre Einstellungen in einer Vielzahl von * CONFIG-Dateien gibt

oder:

  • Sie haben keinen Zugriff (oder nur sehr eingeschränkten Zugriff) auf das Dateisystem des Servers und damit sind Sie wahrscheinlich besser dran, Konfigurationseinstellungen und Benutzereinstellungen in einer Datenbank setzen, im Grunde nichts anderes als die Verbindungszeichenfolge der Konfigurationsdatei zu verlassen auf der Festplatte

Beide Ansätze haben ihre Vor- und Nachteile. Ich habe für eine lange Zeit versucht, einen Weg zu finden, um einen Config-Abschnitt aus einem Datenbankfeld „materialisieren“, so dass ich im Grunde nur die Config XML verwenden, aber in einem Datenbankfeld gespeichert. Leider ist das gesamte .NET 2.0 Config-System sehr viel ist „gesperrt“ und gerade nur Daten aus Dateien kommen annehmen - es gibt keine Möglichkeit, zum Beispiel zu stecken ein Datenbankanbieter dem Config-System zu lesen, dessen Inhalt aus einem Datenbankfeld :-( Wirklich schade, damit!

Der einzige andere Ansatz, den ich gesehen habe, ist ein „ConfigurationService“ in der Stocktrader 2.0 Beispielanwendung von Microsoft zur Verfügung gestellt, aber für meine Bedürfnisse, es fühlte sich an wie viel des Guten und wie ein wirklich komplex, wirklich schwergewichtigen Subsystem.

Andere Tipps

Sie könnte Verwendung SQLite, die eine in sich geschlossene DB in einer einzigen Datei sein wird. Zwei Fliegen mit einer Klappe schlagen?

Wenn Sie eine externe Konfigurationsdatei verweisen, die appsettings (Abfahrt alles andere im normalen app.config) enthält dann glaube ich bearbeite es nur die Einstellungen neu geladen, es nicht die ganze App erzwingen, neu zu starten.

Es gibt eine ähnliche Frage zu diesem Thema hier: Nested app.config (web.config) Dateien

WRT das Problem der Werte in der Mitte der Programmausführung zu ändern, ich denke, man lokal die Werte zwischengespeichert werden können, und ein Ereignis auslösen, wenn sie sich ändern, Routinen ermöglichen einen geeigneten Punkt zu erreichen, bevor die aktualisierten Werte verwendet wird.

ich glaube, in asp.net wir irgendwie diese kostenlos bekommen, weil jede Seite lifecyle verschieden ist, so dass der Wert einfach auf neue Seitenanforderungen angewendet wird, nicht nur in der Mitte einer Hinrichtung.

Edit: Ein wenig mehr Informationen:

Konfigurationsänderungen verursachen einen Neustart der Anwendungsdomäne

MSDN :

  

Änderungen an den Konfigurationseinstellungen in Web.config-Dateien indirekt bewirken, dass die Anwendungsdomäne neu zu starten. Dieses Verhalten tritt von Entwurf. Optional können Sie das configSource Attribut externe Konfigurationsdateien verweisen, die keinen Neustart verursachen, wenn eine Änderung vorgenommen wird. Weitere Informationen finden Sie configSource im Allgemeinen von Abschnitt Elementen ererbte Attribute.

Weitere Informationen über die Configuration Klasse die System.Configuration Namespace , die verwendet werden könnten, die modifizieren Config-Dateien programmatisch (dh in einem Anpassungs-Tool, wenn relevante Plattenleseberechtigungen können zur Verfügung gestellt werden). Wenn Sie zur Verwendung der in Konfigurationsklassen gebaut bleiben, ich denke, die externen configs zu ändern, würde nicht Neustart der Anwendung führen, würde aber Ereignisse (wie Eigenschaft geändert ), die Sie könnten behandeln, Ihr Code, um sicherzustellen, wird durch das Ändern von Einstellungen nicht ertappt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top