Partager via


Modification de la configuration dans un exemple de fichier externe

Mise à jour : novembre 2007

Vous pouvez utiliser un fichier de configuration externe pour étendre des paramètres de configuration de l'application et pour spécifier si les informations d'état sont conservées en cas de modification de ces paramètres, en activant ou en désactivant la fonctionnalité de redémarrage de l'application. Ce redémarrage est contrôlé par l'attribut restartOnExternalChanges, appliqué aux différentes sections du fichier de configuration.

Exemples de fichiers d'application Web

Les sections suivantes incluent le code permettant de générer un exemple d'application Web avec une section personnalisée dont l'attribut configSource pointe vers un fichier de configuration externe et dont l'attribut restartOnExternalChanges a initialement la valeur true.

L'exécution de l'application Web montre ce qui arrive à un compteur de publication global lorsque des modifications sont apportées au fichier de configuration externe, et l'exemple de code proposé montre successivement ce qui se passe lorsque restartOnExternalChanges a la valeur true, la valeur par défaut et la valeur false.

Global.asax

L'exemple d'application Web doit inclure cette page Global.asax. L'exemple de code suivant définit la page avec un compteur de publication global. Le compteur effectue le suivi des demandes de publication générées en actualisant la page Default.aspx de l'application (définie plus loin dans cette rubrique).

' 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

La page Default.aspx contient du code qui crée la section personnalisée dans le fichier Web.config, ajoute un élément au fichier External.config et affiche la valeur du compteur de publication. Notez que la page doit contenir un contrôle Label pour afficher la valeur actuelle du compteur de publication. L'exemple de code suivant illustre l'une des méthodes possibles pour définir ce contrôle.

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

L'exemple de code suivant définit la page Default.aspx.

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

Le fichier Web.config définit la section personnalisée MyAppSettings, comme l'illustre l'exemple de code suivant. Cet exemple utilise le type standard pour traiter cette section, mais vous pouvez créer votre propre type. Pour plus d'informations, consultez ConfigurationElement et 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

Le fichier External.config contient les détails de la section personnalisée MyAppSettings. Avant la première exécution de l'application, vous devez créer ce fichier manuellement dans le répertoire racine de l'application. Pour plus d'informations, consultez l'attribut configSource dans Attributs généraux hérités par les éléments Section. Pour les besoins de cet exemple, vérifiez que votre code contient la section vide suivante.

<MyAppSettings></ MyAppSettings>.

ExternalConfiguration.dll

Le fichier ExternalConfiguration.dll contient le code qui met à jour la section personnalisée MyAppSettings. Vous pouvez placer votre code source dans le répertoire App_Code de votre application. L'exemple sera compilé par ASP.NET lorsque votre application sera demandée. Vous pouvez également compiler l'exemple de fournisseur en tant que bibliothèque et le placer dans le répertoire bin de votre application Web. L'exemple de code suivant montre comment compiler l'exemple à partir de la ligne de commande.

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

L'exemple de code suivant génère le fichier ExternalConfiguration.dll.

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();
        }

    }
}

Utilisation de l'exemple d'application Web

La première exécution de l'application ajoute des éléments au fichier External.config.

Chaque fois que vous actualisez la page Default.aspx, le compteur de publication est remis à zéro. Cela tient au fait que l'attribut restartOnExternalChanges dans la section MyAppSettings a, par défaut, la valeur true.

Si, dans le fichier Web.config, vous affectez à l'attribut restartOnExternalChanges la valeur false, vous remarquerez que le compteur de publication continue à être incrémenté lorsque vous actualisez la page, en dépit des modifications apportées au fichier External.config. Cela s'explique par le fait que vous avez désactivé le redémarrage du domaine d'application.

Voir aussi

Tâches

Comment : créer des sections de configuration personnalisées à l'aide de ConfigurationSection

Concepts

Gestion des modifications apportées aux paramètres de configuration

Sécurisation de la configuration ASP.NET

Référence

ConfigurationElement

ConfigurationSection

Attributs généraux hérités par les éléments Section

location

appSettings, élément (Schéma des paramètres généraux)

trace, élément (Schéma des paramètres ASP.NET)

HttpApplicationState