2010-08-31 5 views
10

Ich habe eine Lösung mit etwa 10 Projekten mit Read-Only-Konfiguration. Sie sind Web-Anwendungen, Windows-Dienste, Konsolen-Apps usw. Alle Projekte außer einem befinden sich auf demselben Server. Jedes Projekt hat 3 Umgebungen - Entwicklung, Test und Produktion. Es gibt also 30 verschiedene Konfigurationen, jede mit einer ordentlichen Anzahl von Einstellungen. Es ist mühsam, die Konfiguration für jede App und Umgebung konsistent zu halten.Wie würden Sie die Konfiguration für mehrere Projekte zentralisieren?

Ich habe festgestellt, dass die meisten der Konfiguration in jedem Projekt üblich ist, also dachte ich, es wäre gut, die Config in irgendeiner Weise zu zentralisieren. Ich habe irgendwo gelesen, dass ein WCF-Service ein guter Ansatz sein könnte. Ich dachte, dass vielleicht eine Bibliothek, die eine fest codierte statische Klasse enthält, tatsächlich in Ordnung ist - obwohl man kompilieren muss, um die Konfiguration zu ändern. Idealerweise sollte die Konfiguration aus einer tatsächlichen .config-Datei stammen.

Wie würden Sie die Konfiguration für mehrere Projekte zentralisieren?

Antwort

11

Wenn Sie die Standard-Konfigurationsoberfläche pflegen möchten, werfen Sie einen Blick auf die ProtectedConfigurationProvider. Diese Anbieter können Sie speichern Sie Ihre Konfigurationsdaten außerhalb eines Standard-Konfigurationsdatei verschlüsseln es wie Sie wollen, oder Umleitung von Anforderungen für die Konfiguration in irgendeiner Weise sehen Sie fit:

Das Schöne an diesem Ansatz ist, dass sich an Ihren bestehenden Anwendungen nichts ändert. Sie müssen nicht wissen, wo ihre Konfiguration gespeichert ist. Der Abruf von Konfigurationsdaten ist im Provider isoliert. Sie können es in einer zentralen Datei speichern, in einer Datenbank speichern oder über einen Web-Service darauf zugreifen. Wenn Sie Ihre Meinung ändern, müssen Sie nur Ihren Provider aktualisieren. Alles andere bleibt gleich.

+0

Ich erinnere mich daran von irgendwo;) Große Antwort! –

2

Sie könnten sicherlich einen WCF-Dienst einrichten, der eine einfache Operation zum Abrufen von Konfigurationseinstellungen bietet, wobei die Anwendung und die Umgebung als Parameter berücksichtigt werden. Dann könnte der Dienst die korrekte Konfiguration aus einer Datei laden und sie an den Aufrufer zurückgeben. Es kann eine gute Idee sein, verschachtelte Konfigurationsdateien zu erstellen, so dass allgemeine Einstellungen nur einmal auf ihrer allgemeinsten Ebene definiert werden.

Ein potenzielles Problem kann auftreten, wenn der WCF-Dienst beim Starten einer Ihrer Apps nicht verfügbar ist. Sie müssen entscheiden, ob für diese Situation die Standardkonfiguration/das Caching der vorherigen Kopie vorhanden ist. Lassen Sie Apps nicht starten, wenn sie keine Verbindung herstellen können.

Eine andere Sache zu prüfen, ist jedoch der Vorteil von .config-Dateien in .NET, dass, wenn sie die App ändern kann reagieren; Möglicherweise möchten Sie einen Rückruf WCF-Dienst, der Clients benachrichtigt, wenn ihre Konfiguration auf dem zentralen Server aktualisiert wurde, so dass sie eine neue Kopie anfordern und bei Bedarf selbst aktualisieren können.

+0

Sie haben einige Dinge angesprochen, die ich nicht mit dem WCF-Ansatz hatte. Ich habe deine Antwort erneuert. – HAL9000

1

Da sie (fast) alle auf dem gleichen Server sind, könnten Sie in den machine.config und/oder zentralen web.config Dateien Standardwerte vorsehen. Ich bin nicht normalerweise ein Fan der Verwendung/Änderung dieser Datei, aber sie sind da ... in \Windows\Micsrosoft.NET\Framework<version>\Config\

+0

Keine schlechte Option. Wenn ich die Server besitze, würde ich machine.config benutzen. Ich bin bei einer großen Organisation und wir versuchen, die Server-Builds wirklich einfach zu halten. – HAL9000

Verwandte Themen