Freigeben über


Beispiel für das Ändern der Konfiguration in einer externen Datei

Aktualisiert: November 2007

Mit einer externen Konfigurationsdatei können Sie die Einstellungen der Anwendungskonfiguration erweitern und steuern, ob bei Änderungen dieser Einstellungen Zustandsinformationen beibehalten werden, indem Sie die Funktionen für den Anwendungsneustart aktivieren bzw. deaktivieren. Dies wird durch das restartOnExternalChanges-Attribut gesteuert, das auf unterschiedliche Konfigurationsdateiabschnitte angewendet wird.

Beispieldateien für eine Webanwendung

Die folgenden Abschnitte enthalten den Code zum Erstellen einer Beispielwebanwendung mit einem benutzerdefinierten Abschnitt, dessen configSource-Attribut auf eine externe Konfigurationsdatei zeigt und dessen restartOnExternalChanges-Attribut zunächst auf true festgelegt ist.

Beim Ausführen der Webanwendung können Sie verfolgen, wie sich die Änderung der externen Konfigurationsdatei auf einen globalen Postbackzähler auswirkt. Im Codebeispiel wird veranschaulicht, was jeweils geschieht, wenn restartOnExternalChanges auf true, auf den Standardwert bzw. auf false festgelegt wird.

Global.asax

Die Beispielwebanwendung muss die Seite Global.asax enthalten. Im folgenden Codebeispiel wird die Seite mit einem globalen Postbackzähler definiert. Der Zähler verfolgt die Postbackanforderungen nach, die durch das Aktualisieren der Seite Default.aspx der Anwendung (weiter unten in diesem Thema definiert) generiert werden.

' Code that runs on application startup.
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    
    ' This counter is set to 0 the first time 
    ' the application starts and, thereafter, every 
    ' time it restarts.
    Dim postBackCount As Integer = 0
    
    Dim appState As HttpApplicationState = Application.Contents
    appState.Add("postBackKey", postBackCount)

End Sub 'Application_Start
// Code that runs on application startup.
void Application_Start(object sender, EventArgs e) 
{
       
        // This counter is set to 0 the first time 
        // the application starts and, thereafter, every 
        // time it restarts.
        int postBackCount = 0;
        
        HttpApplicationState appState = Application.Contents;
        appState.Add("postBackKey", postBackCount);
        
}

Default.aspx

Die Seite Default.aspx enthält Code, der den benutzerdefinierten Abschnitt in der Datei Web.config erstellt, der Datei External.config ein Element hinzufügt und den Wert des Postbackzählers anzeigt. Beachten Sie, dass die Seite ein Label-Steuerelement enthalten muss, um den aktuellen Wert des Postbackzählers anzuzeigen. Im folgenden Codebeispiel wird ein Verfahren zum Definieren dieses Steuerelements veranschaulicht.

<asp:Label ID="ResultId"  style="font-weight:bold; color:Red;"/>

Im folgenden Codebeispiel wird die Seite Default.aspx definiert.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) 
        Dim extConfig As ExternalConfiguration = Nothing
        
        If Not IsPostBack Then
            ' Create an instance of the custom section.
            extConfig = New ExternalConfiguration()
        End If
                
        Dim postBackCount As Integer = _
        Fix(HttpContext.Current.Application("postBackKey"))
        'Display current counter value.
        ResultId.Text = postBackCount.ToString()
        
        HttpContext.Current.Application("postBackKey") = _
        Fix(HttpContext.Current.Application("postBackKey")) + 1
        
        extConfig.UpdateAppSettngs()
End Sub 'Page_Load
protected void Page_Load(object sender, EventArgs e)
{
        ExternalConfiguration extConfig = null;
        
        if (!IsPostBack)
        {
            // Create an instance of the cusom section.
            extConfig =
                new ExternalConfiguration();
        }

        int postBackCount =
           (int) HttpContext.Current.Application["postBackKey"];
        ResultId.Text = postBackCount.ToString();

        HttpContext.Current.Application["postBackKey"] =
            (int)HttpContext.Current.Application["postBackKey"] + 1;
 
        extConfig.UpdateAppSettngs();
}

Web.config

In der Datei Web.config wird der benutzerdefinierte Abschnitt MyAppSettings festgelegt, wie im folgenden Codebeispiel gezeigt. In diesem Beispiel wird zum Verarbeiten des Abschnitts der Standardtyp verwendet, Sie können jedoch auch einen eigenen Typ erstellen. Ausführliche Informationen finden Sie unter ConfigurationElement und ConfigurationSection.

<section 
    name="MyAppSettings" 
    type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    restartOnExternalChanges="true" 
    requirePermission="false" />

External.config

Die Datei External.config enthält die Details des benutzerdefinierten Abschnitts MyAppSettings. Sie müssen diese Datei im Stammverzeichnis der Anwendung manuell erstellen, bevor Sie die Anwendung zum ersten Mal ausführen. Weitere Informationen finden Sie in Allgemeine von Abschnittselementen geerbte Attribute unter dem configSource-Attribut. Stellen Sie sicher, dass der Code für dieses Beispiel den folgenden leeren Abschnitt enthält.

<MyAppSettings></ MyAppSettings>.

ExternalConfiguration.dll

Die Datei ExternalConfiguration.dll enthält den Code, der den benutzerdefinierten Abschnitt MyAppSettings aktualisiert. Sie können den Quellcode in das Verzeichnis App_Code der Anwendung einfügen. Das Beispiel wird von ASP.NET kompiliert, wenn die Anwendung angefordert wird. Sie können auch den Beispielanbieter als Bibliothek kompilieren und in das Verzeichnis Bin der Webanwendung einfügen. Im folgenden Codebeispiel wird das Kompilieren des Beispiels über die Befehlszeile veranschaulicht.

vbc /out: ExternalConfiguration.dll /t:library ExternalConfiguration.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out: ExternalConfiguration.dll /t:library ExternalConfiguration.cs /r:System.Web.dll /r:System.Configuration.dll

Im folgenden Codebeispiel wird die Datei ExternalConfiguration.dll erstellt.

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Configuration
Imports System.Web.Configuration

Namespace Samples.AspNet


    Public Class ExternalConfiguration


        ' Instantiate the ExternalConfiguration type.
        Public Sub New()
            ' Access the root Web.config file.
            Dim config As System.Configuration.Configuration = _
            WebConfigurationManager.OpenWebConfiguration("/configTarget")

            ' Get the custom MyAppSettings section.
            Dim appSettings As AppSettingsSection = _
            CType(config.GetSection("MyAppSettings"), AppSettingsSection)

            ' Perform the first update.
            UpdateAppSettings()

        End Sub 'New



        ' Update the custom MyAppSettings section.
        ' Note , if the section restartOnExternalChanges attribute 
        ' is set to true, every update of the external 
        ' configuration file will cause the application 
        ' to restart.
        Public Sub UpdateAppSettings()

            Dim config As System.Configuration.Configuration = _
            WebConfigurationManager.OpenWebConfiguration("/configTarget")

            Dim appSettings As AppSettingsSection = _
            CType(config.GetSection("MyAppSettings"), AppSettingsSection)

            Dim count As Integer = appSettings.Settings.Count

            appSettings.Settings.Add("key_" + count.ToString(), _
            "value_" + count.ToString())

            config.Save()

        End Sub 'UpdateAppSettngs

    End Class 'ExternalConfiguration 

End Namespace
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Web.Configuration;

namespace Samples.AspNet
{


    public class ExternalConfiguration
    {

        // Instantiate the ExternalConfiguration type.
        public ExternalConfiguration()
        {
            // Access the root Web.config file.
            System.Configuration.Configuration config =
            WebConfigurationManager.OpenWebConfiguration(
                              "/configTarget");

            // Get the custom MyAppSettings section.
            AppSettingsSection appSettings =
                (AppSettingsSection)config.GetSection("MyAppSettings");

            // Perform the first update.
            UpdateAppSettings();
        }


        // Update the custom MyAppSettings section.
        // Note , if the section restartOnExternalChanges attribute 
        // is set to true, every update of the external 
        // configuration file will cause the application 
        // to restart.
        public void UpdateAppSettings()
        {

            System.Configuration.Configuration config =
            WebConfigurationManager.OpenWebConfiguration(
                              "/configTarget");

            AppSettingsSection appSettings =
                (AppSettingsSection)config.GetSection("MyAppSettings");

            int count = appSettings.Settings.Count;

            appSettings.Settings.Add(
                "key_" + count.ToString(), 
                "value_" + count.ToString());

            config.Save();
        }

    }
}

Verwenden der Beispielwebanwendung

Beim ersten Ausführen der Anwendung werden der Datei External.config Elemente hinzugefügt.

Bei jedem Aktualisieren der Seite Default.aspx wird der Postbackzähler auf 0 (null) zurückgesetzt. Dies geschieht, weil das restartOnExternalChanges-Attribut im Abschnitt MyAppSettings standardmäßig auf true festgelegt ist.

Wenn Sie in der Datei Web.config das restartOnExternalChanges-Attribut auf false festlegen, werden Sie feststellen, dass der Postbackzähler trotz der Änderungen in der Datei External.config beim Aktualisieren der Seite erhöht wird. Der Grund hierfür ist, dass Sie den Neustart der Anwendungsdomäne deaktiviert haben.

Siehe auch

Aufgaben

Gewusst wie: Erstellen von benutzerdefinierten Konfigurationsabschnitten mit ConfigurationSection

Konzepte

Verwalten von Änderungen an Konfigurationseinstellungen

Absichern der ASP.NET-Konfiguration

Referenz

ConfigurationElement

ConfigurationSection

Allgemeine von Abschnittselementen geerbte Attribute

location

appSettings-Element (allgemeines Einstellungsschema)

trace-Element (ASP.NET-Einstellungsschema)

HttpApplicationState