Frage

Ich habe Schwierigkeiten mit der Konfiguration einer ASP.Net-Anwendung der Verwaltung für verschiedene Clients zu verteilen. Die schiere Menge der verschiedenen Einstellungen, die Notwendigkeit twiddling große Mengen an Zeit in Anspruch nimmt, und die aktuellen Konfigurationsmethoden sind uns zu kompliziert, zu ermöglichen, diese Verantwortung zu drücken, um Supportpartner.

Irgendwelche Vorschläge für eine bessere Methoden, um dieses oder gute Informationsquellen für die Forschung zu behandeln?

Wie wir Dinge tun, derzeit:

  • Verschiedene XML-Konfigurationsdateien, die in Web.Config referenziert werden, zum Beispiel einer AppSettings.xml.
  • Konfigurationen für bestimmte Sites sind in zweifacher Ausfertigung Konfigurationsdateien gespeichert.
  • Textdateien Listen von Daten, die spezifisch auf die Website
  • enthalten
  • In einigen Fällen manuell Einmal Änderungen an der Datenbank
  • C # Konfiguration für Windsor IOC.

Die spezifischen Probleme, die wir haben:

  • Verschiedene Standorte mit unterschiedlichen Funktionen aktiviert, verschiedene externe Dienste müssen wir reden und verschiedene Geschäftsregeln.
  • Verschiedene Bereitstellungstypen (live, Test, Training)
  • ändern Konfigurationsschlüssel in Versionen (hinzugefügt wird, entfernen), was bedeutet, wir werden alle doppelten Dateien aktualisieren
  • Wir müssen noch in der Lage zu ändern Schlüssel sein, während die Anwendung läuft

Unsere aktuellen Gedanken darüber, wie wir diesen Ansatz könnten, sind:

  • Verschieben Sie die Konfiguration in dynamisch kompilierten Code (möglicherweise Boo, Binsor oder JavaScript)
  • Haben Sie irgendeine Form von diffing / Fusionierung Konfiguration: Kombinieren Sie eine Standardkonfiguration mit einem Live / Test / Training config und eine ortsspezifische Konfiguration
War es hilfreich?

Lösung

Unabhängig davon, welche Art und Weise Sie gehen, ich denke, es wertvoll sein könnte, die Vorstellung einer einzigen „Quelle der Wahrheit“ zu haben, für Ihre Konfiguration.

Die Vervielfältigung ist in Ordnung, wenn Sie die Konfiguration auf einige Komponenten in ihrer eigenen spezialisierten Form zur Verfügung stellen müssen.

Aber behalten Sie Ihre geistige Gesundheit denke ich, sollten Sie versuchen, und zielen darauf ab einem Ort zu haben, wo Sie alle Konfigurationssatz in Bezug auf Ihre Anwendung, und dann eine gut definierte Mechanismus zum Übersetzen, dass in Einträge innerhalb Web.config, und jede andere config-Mechanismus müssen Sie Unterstützung.

Je nach Niveau der Fähigkeit Ihres Support Partnern (auch nicht, dass sie XML brechen), ich denke, Sie auch einen GUI-Dienstprogramm zur Verfügung stellen möchten können sie alle die Knöpfe in dieser „Quelle der Wahrheit“ Konfigurationsdatei wirbeln zu lassen mit „Übernehmen“ zu gehen und laufen verwandeln / Update-Code, um die notwendigen Änderungen an Web.config & Freunde zu machen.

Dann Konfiguration für verschiedene Websites / Kunden zu verwalten, können Sie theoretisch eine Konfigurationsdatei um zu verwalten.

Hinweis: In ASP.NET 4.0 eine Build-Zeit Konfiguration Transformationsmechanismus verfügbar sein wird (siehe http://blog.hmobius.com/post/2010/02/17/ASPNET-40-Part-4 -Config-Transformation-Files.aspx ), die einfacher, diese Aufgabe machen kann. Es scheint, dass Sie dies mit einigen Hacks für nicht Web-Projekte verwenden können (siehe http://philbolduc.blogspot.com/2010/03/using-config-transforms-outside-web.html ).

Wenn Sie jedoch diese Änderungen zum Zeitpunkt der Bereitstellung vornehmen müssen, können Sie mit dem Schreiben von benutzerdefinierten Tool stecken, dies zu tun, auch wenn es wie die XDT Transformationen sieht kann der Weg für Sie zu gehen, da Sie wollen in der Lage sein, hinzufügen / aktualisieren / entfernen.

Andere Tipps

Wenn der Code der Konfigurationselemente unter Verwendung von Code ist Sie bei der Verwaltung / ändern kann (und alle laufen in verwaltetem Code Raum / C #) Ich Portierung die Methodenaufrufe aussehen würde, die Einstellungen auf einen Anruf in eine Singleton-ähnlichen Klasse bekommt mit an mindestens ein GetString () -Methode auf sie.

GetObject () kann sehr nützlich sein (Besuche die .Net XML-Serialisierung Sachen - die Amerikaner buchstabieren es mit einer ‚z‘: Serialisierung) ... nützlich für viele Sachen, aber auch, weil es bedeutet, können Sie Verpackungen im Zusammenhang mit starten Konfigurationselemente in einzelne Einträge im Speicher.

In Bezug auf einen einzelnen Speicher (eine Datenbanktabelle mit im Cache-Zugriff) verwenden oder verwenden Ihre neue Konfiguration Fassade nur zu verkapseln, wo die Konfigurationselemente gespeichert sind -, die an Sie ist ... Ich ziehe es nachdrücklich empfohlen, einen einzelnen Speicher pro Produktbereitstellung für Konfiguration, denn dann wissen Sie immer genau, wo sie suchen und wo Änderungen vorzunehmen. Alle die Web-Service-Referenzen (WCF oder anderweitig) kann mit Runtime-Strings an constucted und aufgerufen werden ...:)

Im Hinblick auf den Wert für Schlüssel Cachen - ich meine eigenen in Cache-Speicher (für kleinere Anwendungen), da der Aufwand auf dem Stapel überschaubar ist ... Dinge wie memcache könnten hier arbeiten (config Speicher werden über TCP zugegriffen / auf dem Netzwerk irgendwo) ...

EDIT So etwas wie:

public class ConfigurationStore
{
    private static ConfigurationStore _instance = null;

    public static ConfigurationStore Instance {
        get {
        if(_instance == null)
        {
            _instance = new ConfigurationStore();
        }

        return _instance;
        }
    }

    public string GetValue(string key)
    {
        ....
    }

    public Object GetObject(string key)
    {
        ...
    }
}

Sie können prüfen, bei NAnt Skripte für die Automatisierung der Suche mit einigem benutzerdefinierten .net Dienstprogramm kombiniert, um Konfigurationstasten zu bearbeiten.

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