ASP.NET: Wo können Anwendungseinstellungen gespeichert werden?

7

Vor kurzem habe ich festgestellt, dass die Datei "Web.Config" einen Abschnitt <appSettings> enthält, der zum Speichern der Anwendungseinstellungen gut zu sein scheint. Verdammt, es hat sogar einen programmatischen Weg, um auf die Datei über eine Standard-Systembibliothek zuzugreifen. Also bin ich clever und habe eine Schnittstelle geschrieben, um darauf zuzugreifen und dann eine konkrete Implementierung der Schnittstelle, die hier gezeigt wird:

%Vor%

Dann kam ich zu dem Ergebnis, dass Einstellungen zurückspeichert auf " web.config "während die Anwendung ausgeführt wird, wird die gesamte Anwendung neu gestartet . Das erscheint mir völlig unvernünftig, denn wenn ich vielmals in web.config schreibe und die Anwendung jedes Mal neu startet, werden Dinge wie HttpRuntime.Cache vollständig geleert, was meinen Cache nutzlos macht, weil er ständig leer und neu auffüllt.

Ich frage mich also: Wo sollte ich meine Anwendungseinstellungen speichern?

Gibt es dafür eine gute Lösung, damit ich nicht meine eigene rollen muss?

BEARBEITEN:

Okay, danke an alle, die vorgeschlagen haben, eine Datenbank und ein mögliches Tabellenschema zu verwenden. Ich denke, ich werde mit dem folgenden Schema gehen:

%Vor%

Obwohl ich nicht denke, dass ich die "Einstellung" der P-Taste vornehmen werde, sondern stattdessen einen Auto-Incr-Index verwenden werde. Auf diese Weise kann ich, wenn ich eine Anwendung habe, die etwas an mehrere Manager senden muss, viele speichern:

%Vor%

Und dann kann ich verwenden:

%Vor%

Und es wird eine Liste von E-Mail-Adressen zurückgegeben und nicht nur ein einzelner Wert.

Macht das Sinn?

    
Pretzel 20.10.2010, 14:23
quelle

9 Antworten

13

web.config wird im Allgemeinen für schreibgeschützte Einstellungen verwendet, d. die Einstellungen, die während der Bereitstellung der Anwendung vom Systemadministrator festgelegt wurden.

Wenn Sie und die Einstellungen schreiben möchten, ist der naheliegendste Weg, die Datenbank zu verwenden. Das hat übrigens einen Vorteil: Eine Anwendung kann auf mehreren Servern gehostet werden und liest und schreibt die Einstellungen trotzdem korrekt,

Sie können auch Ihren benutzerdefinierten Speicher für die Einstellungen implementieren, aber es wird wahrscheinlich schwieriger zu implementieren und nicht viel schneller.

Um Ihre zweite Frage zu beantworten, hängt die Struktur Ihrer Datenbank vom Typ der Einstellungen ab, die Sie speichern möchten.

Wenn Sie heterogene eindeutige Einträge speichern müssen:

  • Mailadresse eines Administrators,
  • Maximale Anzahl von Einträgen, die auf der Startseite der Website angezeigt werden sollen,
  • Text, der auf der Seite "Über uns" angezeigt werden soll,
  • Boolescher Wert, der angibt, ob öffentliche Kommentare aktiviert sind oder nicht,

Dann müssen Sie varchar s oder andere mehr oder weniger freundliche Typen als Schlüssel verwenden, um die Einträge zu identifizieren (anstatt sie nach ihrem Index zu referenzieren).

Wenn Sie andererseits die E-Mail-Adressen mehrerer Manager speichern möchten, sollten Sie eine Tabelle Manager erstellen, die ihre E-Mail-Adressen, Namen, Datum der letzten Verbindung usw. enthält .

Sie sollten wirklich nicht beide kombinieren . Theoretisch können Sie auf den Eintrag in den Einstellungen nach Komponenten- / Einstellungspaaren verweisen. In der Praxis macht es die Dinge schwieriger und schafft eine Reihe von Problemen:

  • Was ist, wenn Sie außerdem für jeden Manager einen booleschen Wert speichern müssen, der angibt, ob er / sie Benachrichtigungen von Ihnen erhalten möchte? Mit Ihrer derzeitigen Struktur wird dies unmöglich sein.
  • Da die gleiche Einstellung mehrere Werte haben kann, wie wollen Sie mit den Einstellungen umgehen, die eindeutig sein müssen? Zum Beispiel darf nur ein einzelner Textwert auf der Seite "Über uns" angezeigt werden. Was ist, wenn zwei Werte in der Datenbank gespeichert sind?
Arseni Mourzenko 20.10.2010, 14:27
quelle
6

Das Speichern von Einstellungen in web.config ist nützlich, da unterschiedliche Einstellungen in verschiedenen Umgebungen leicht möglich sind. Wie Sie jedoch sagen, ist dies nutzlos, wenn Sie wahrscheinlich die Einstellungen in einer Live-Umgebung ändern möchten.

Eine einfache Datenbanktabelle ist die sinnvollste Methode, um die Werte zu ändern.

zB

%Vor%

Wenn Sie SQL Server verwenden, können Sie die Spalte Value auf sql_variant setzen, wodurch Sie verschiedene Datentypen speichern können.

    
Paul Spangle 20.10.2010 14:29
quelle
5

Dies ist für Anwendungseinstellungen gedacht, nicht jedoch für Einstellungen, die zur Laufzeit dynamisch geändert werden sollen. Es handelt sich vielmehr um Einstellungen, die sich nur gelegentlich ändern und bei denen Sie einen Neustart der App erwarten (und sogar wünschen), wenn sie sich ändern.

Für flüchtigere Einstellungen sollten Sie einfach ein einfaches Datenbanksystem verwenden - sogar eine flache Datei / XML im App_Data Verzeichnis kann funktionieren, wenn Ihre App keine Datenbank verwendet.

    
Andrew Barber 20.10.2010 14:27
quelle
5

Ja. Wenn Sie die Datei web.config ändern, wird die Anwendung zurückgesetzt. Normalerweise verwalte ich eine Einstellungstabelle, in der Schlüssel / Wert-Paare für die Einstellungen gespeichert werden und von dort aus darauf zugegriffen wird.

EINSTELLUNGEN

%Vor%

Schreiben Sie dann eine Klasse, die Werte in diese Tabelle einfügen, löschen, aktualisieren kann.

Ex-Daten für die Tabelle SETTINGS

%Vor%     
Shyju 20.10.2010 14:28
quelle
2

Normalerweise füge ich meiner Einstellungs-Tabelle ein "type" -Feld hinzu, so dass ich nur die Gruppe der benötigten Einstellungen abrufe, die für mich funktioniert, um Einstellungen zu gruppieren und sie sofort abzurufen.

    
jangeador 20.10.2010 14:45
quelle
1

Erstellen Sie eine Tabelle mit Schlüsselwerten wie folgt:

%Vor%     
abatishchev 20.10.2010 14:29
quelle
1

Zunächst einmal ist es überhaupt nicht unvernünftig, wenn Sie überlegen, welche Informationen in der Datei web.config gespeichert werden sollen. Wenn Sie beispielsweise Baugruppeninformationen, Verbindungszeichenfolgen usw. ändern, muss die Anwendung die Werte stoppen und neu laden, damit sie mit diesen Einstellungen ausgeführt werden können.

Wenn Sie anwendungsweite Einstellungen speichern, können Sie eine Settings-Tabelle in Ihrer Datenbank erstellen oder sogar eine separate Textdatei zum Speichern der Einstellungen verwenden.

Wenn Sie über das Speichern benutzerdefinierter Einstellungen sprechen, sollten Sie sich ASP.NET-Profileigenschaften ansehen .

    
Justin Niessner 20.10.2010 14:30
quelle
1

In diesem Abschnitt der web.config-Datei sollten auf jeden Fall anwendungsweite Einstellungen gespeichert werden, da diese Festcodierungswerte verhindern, die sich im Laufe der Zeit ändern können. Sie müssen sie nicht mit Ihrem eigenen Code lesen, da es eine integrierte Methode gibt: Verwenden Sie das Array System.Configuration.ConfigurationManager.AppSettings , um sie abzurufen (Sie müssen der Assembly System.Configuration in Ihrem Projekt einen Verweis hinzufügen). Sie können AppSettings auch über das ASP.NET-Websiteverwaltungs-Tool bearbeiten (Menü Projekt - & gt; ASP.NET-Konfiguration).

Für Werte, die Sie häufiger ändern möchten und während die Site läuft, ist es sinnvoll, eine XML-Datei, eine Lightweight-Datenbank (wie SQLite oder SQL Server Compact) oder eine Textdatei für diese Einstellungen zu verwenden.

    
Dave R. 20.10.2010 14:43
quelle
0

Wenn Sie Einstellungen speichern möchten, können Sie sie immer in einer benutzerdefinierten Konfigurationsdatei speichern.

Ich habe genau das eine Weile zurück getan, und ich habe den Code dafür zur Verfügung hier .

    
George Stocker 20.10.2010 15:06
quelle