Frage

Hat jemand diese Arbeit in einer Web-Anwendung?

Egal was ich tue, scheint es, dass mein appSettings Abschnitt (Weitergeleitet von web.config appSettings Datei = „\ Site \ site.config“) nicht wieder geladen werden.

Bin ich auf den Fall zum Scheitern verurteilt zu müssen, nur die Anwendung neu starten? Ich habe gehofft, diese Methode mich zu einer leistungsfähigere Lösung führen würde.

Update:

Mit dem ‚Nachladen‘ Ich meine erfrischend ConfigurationManager.AppSettings, ohne vollständig meine ASP.NET-Anwendung neu zu starten und die übliche Start Latenz entstehen muß.

War es hilfreich?

Lösung

Stellen Sie sicher, dass Sie das Bestehen der richtigen Groß- und Kleinschreibung Wert RefreshSection, das heißt

ConfigurationManager.RefreshSection("appSettings");

Andere Tipps

Dies scheint ein Fehler (vielleicht ein Fehler) zu sein, wenn eine externe Konfigurationsdatei für Ihre appSettings verwenden. Ich habe es versucht, das configSource Attribut und RefreshSection einfach nie funktioniert, bin ich davon aus, das die gleiche ist, wenn die Datei-Attribut. Wenn Sie Ihren appSettings zurück in Ihrem web.config bewegen RefreshSection perfekt funktionieren, aber sonst sind ich fürchte, Sie zum Scheitern verurteilt.

Aus irgendeinem Grund ConfigurationManager.RefreshSection("appSettings") nicht für mich arbeitete. Neuladen der Web.Config in ein Objekt Konfiguration scheint korrekt zu funktionieren. Der folgende Code nimmt die Datei Web.config ein Verzeichnis unter dem Ausführen (ist) Ordner ist.

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
Uri uriAssemblyFolder = new Uri(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase));
string appPath = uriAssemblyFolder.LocalPath;
configMap.ExeConfigFilename = appPath + @"\..\" + "Web.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); 

Und wird verwendet, wie:

string webConfigVariable = config.AppSettings.Settings["webConfigVariable"].Value;

Als Alternative können Sie Ihre eigene ConfigSection und setzte restartOnExternalChanges="false" schreiben können.

Dann, wenn der Abschnitt mit ConfigurationManager.GetSection("yourSection") Lesen Sie die Einstellungen werden Auto-frischt ohne Neustart der Anwendung .

Und Sie können Ihre Einstellungen stark typisierte oder als Namevaluecollection implementieren.

.RefreshSection () funktioniert nicht, wenn die appSettings extern ist.

Sie können jedoch die folgende verwenden, um einen Wert zu ändern:

ConfigurationManager.AppSettings.Set(key, value)

Dies wird die Einstellung nicht auf Datei ändern, nur den geladenen Wert im Speicher.

Also statt RefreshSection der Verwendung Ich habe die folgenden:

string configFile="path to your config file";
XmlDocument xml = new XmlDocument();
xml.Load(configFile);

foreach (XmlNode node in xml.SelectNodes("/appSettings/add"))
{
    string key = node.Attributes["key"].Value;
    string value= node.Attributes["value"].Value;
    ConfigurationManager.AppSettings.Set(key, value);
}

Alle nachfolgenden Aufrufe AppSettings.Get den aktualisierten Wert enthalten.

Die appSettings werden dann, ohne aktualisiert werden, um die Anwendung neu zu starten.

Ja. Sie sind mit iis Neustarten stecken.

Es ist eine Funktion, mit asp.net 4.0 und IIS 7.5, wo die Erstinbetriebnahme entfernt wird.

Ich bin nicht sicher, ob dies in einer Web-Anwendung möglich ist, aber es funktioniert in einer Desktop-Anwendung. Versuchen Sie es mit Configuration anstatt Configuration (in der Sie schreien für veraltete Klassen ...), dann alle Daten in einer Klasse zu lesen. Wenn Sie aktualisieren möchten, einfach eine neue Instanz erstellen und alle Verweise auf die alte Instanz fallen. Meine Theorie dafür, warum das funktioniert (könnte falsch sein): Wenn man nicht direkt die app.config Zugriff auf die gesamte Zeit Datei, die Sie ausführen, die Dateisperre wird durch die Anwendung fällt gelassen. Dann können Änderungen vorgenommen werden, wenn Sie nicht die Datei zugreifen.

Die App.Config Einstellungen werden im Speicher beim Starten der Anwendung im Cache gespeichert. Aus diesem Grunde glaube ich nicht, Sie in der Lage sein werden, um diese Einstellungen zu ändern, ohne die Anwendung neu starten. Eine Alternative, die ziemlich gerade sein soll nach vorne wäre eine separate, einfache XML-Konfigurationsdatei zu erstellen, und zu handhaben Laden / Caching / es selbst neu zu laden.

zu schreiben, rufen Sie es so aus:

Dim Config Wie System.Configuration.Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration ( "~")

Zurück AddOrUpdateAppSetting (config "YourSettingKey", "YourValueForTheKey")

Zum Lesen und sicherzustellen, dass Sie die Werte in der Datei erhalten, anstelle der in Cache, lesen Sie es auf diese Weise:

Dim config As System.Configuration.Configuration = WebConfigurationManager.OpenWebConfiguration("~")
  Return config.AppSettings.Settings("TheKeyYouWantTheValue").Value

Voll Beispiel:

Protected Shared Function AddOrUpdateAppSetting( _
       ByVal Config As System.Configuration.Configuration _
     , ByVal TheKey As String _
     , ByVal TheValue As String _
     ) As Boolean</p>

    Dim retval As Boolean = True

    Dim Itm As System.Configuration.KeyValueConfigurationElement = _
        Config.AppSettings.Settings.Item(TheKey)
    If Itm Is Nothing Then
        If Config.AppSettings.Settings.IsReadOnly Then
        retval = False
        Else
        Config.AppSettings.Settings.Add(TheKey, TheValue)
        End If


    Else
        ' config.AppSettings.Settings(thekey).Value = thevalue
        If Itm.IsReadOnly Then
            retval = False
        Else
            Itm.Value = TheValue
        End If


    End If
    If retval Then
     Try
        Config.Save(ConfigurationSaveMode.Modified)

     Catch ex As Exception
        retval = False
     End Try

    End If

    Return retval

End Function

Haben Sie versucht, Ihre AppSettings in seiner eigenen externen Datei zu speichern?

Von app.config / web.config:

<appSettings configSource="appSettings.config"></appSettings>

appSettings.config:

<?xml version="1.0"?>
<appSettings>
  <add key="SomeKey" value="SomeValue" />
</appSettings>

Änderungen an appSettings.config sollten sofort angezeigt werden. Mehr Info: http://msdn.microsoft.com/en- us / library / system.configuration.sectioninformation.configsource.aspx

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