Partager via


Comment : accéder à distance aux fichiers de configuration ASP.NET et les modifier

Mise à jour : novembre 2007

Les types System.Configuration et System.Web.Configuration permettent à votre application d'accéder aux fichiers de configuration hébergés sur un serveur distant. Vous pouvez notamment ouvrir et modifier le fichier Machine.config ou un fichier Web.config dans une application Microsoft Internet Information Services (IIS), ou dans ses répertoires enfants, sur un serveur distant. Cette rubrique :

  • montre comment configurer le serveur distant afin de permettre à un ordinateur client d'accéder aux fichiers de configuration du serveur ;

  • fournit une application console, à exécuter sur l'ordinateur client, capable de lire ou de modifier les fichiers de configuration du serveur ;

  • présente les considérations à prendre en compte en matière de sécurité.

Pour accéder aux fichiers de configuration d'un serveur distant, l'ordinateur client doit être en mesure de communiquer avec le serveur. Pour activer cette communication, un composant de configuration distante doit être installé sur le serveur.

L'ordinateur client accède ensuite aux fichiers de configuration du serveur en appelant l'API de configuration ASP.NET par l'intermédiaire du composant de configuration distante. Pour plus d'informations, consultez Modification des fichiers de configuration distants ASP.NET.

Remarque :

Si le fichier de configuration demandé n'existe pas, le .NET Framework en cours d'exécution sur le serveur retourne un fichier de configuration entièrement composé de paramètres hérités qui s'appliquent au chemin d'accès spécifié. Si votre application exige une mise à jour, un nouveau fichier est créé. Lorsque vous exécutez l'application console, vous devez entrer un nom de serveur valide. En effet, ASP.NET transmet directement ce nom au système d'exploitation. Vous devez entrer également un nom d'utilisateur qualifié complet avec le préfixe du nom de domaine.

Pour configurer le serveur distant

  1. Installez le composant de configuration distante sur le serveur à l'aide de l'outil ASP.NET IIS Registration (Aspnet_regiis.exe) avec la commande config+, comme illustré dans le code suivant.

    Aspnet_regiis config+
    
  2. Vérifiez, par programme ou manuellement, que le fichier Web.config du « Site Web par défaut » du serveur IIS contient des valeurs similaires à ce qui suit :

    <appSettings>
        <add key="keyName1", value = "this entry value"/>
        <add key="keyName2", value = "this entry value"/>
        <add key="keyName3", value = "this entry value"/>
    </appSettings>
    

Pour mettre à jour les fichiers de configuration distants à l'aide d'une application console

  • Exécutez l'application console fournie dans l'exemple de code ci-dessous pour mettre à jour le fichier Web.config du Site Web par défaut sur le serveur distant. Cet exemple suppose que l'utilisateur exécutant l'application cliente possède des privilèges d'administrateur sur le serveur distant. Vous pouvez utiliser l'une de ces deux commandes.

    >remoteconfiguration machineName
    >remoteconfiguration machineName domainName\userName password
    

Exemple

Imports System
Imports System.Configuration
Imports System.Web.Configuration
Imports System.Collections.Specialized


' This example dDemonstrates how to access and modify remote 
' configuration files


Public Class RemoteConfiguration


    ' The application entry point.
    Public Shared Sub Main(ByVal args() As String) 

        ' This string  contains the name of 
        ' the remote server.
        Dim machineName As String = String.Empty

        ' Get the user's input.
        If args.Length > 0 Then
            ' Get the name of the remote server.
            ' The machine name must be in the format
            ' accepted by the operating system.
            machineName = args(0)

            ' Get the user name and password.
            If args.Length > 1 Then
                Dim userName As String = args(1)
                Dim password As String = String.Empty
                If args.Length > 2 Then
                    password = args(2)
                End If 
                ' Update the site configuration.
                UpdateConfiguration(machineName, userName, password)
            Else
                ' Update the site configuration.
                UpdateConfiguration(machineName)
            End If
        Else
            Console.WriteLine("Enter a valid server name.")
        End If

    End Sub 'Main


    ' Update the configuration file using the credentials
    ' of the user running this application. Tthen,
    ' call the routine that reads the configuration 
    ' settings.
    ' Note that the system issues an error if the user
    ' does not have administrative privileges on the server.
    Public Overloads Shared Sub _
    UpdateConfiguration(ByVal machineName As String)
        Try
            Console.WriteLine("MachineName:  [{0}]", machineName)
            Console.WriteLine("UserDomainName:  [{0}]", _
                Environment.UserDomainName)
            Console.WriteLine("UserName:  [{0}]", _
                Environment.UserName)

            ' Get the configuration.
            Dim config As Configuration = _
                WebConfigurationManager.OpenWebConfiguration("/", _
                "Default Web Site", Nothing, machineName)

            ' Add a new key/value pair to appSettings.
            Dim count As String = _
                config.AppSettings.Settings.Count.ToString()
            config.AppSettings.Settings.Add("key_" + count, _
                "value_" + count)

            ' Save changes to the file.
            config.Save()

            ' Read the new appSettings.
            ReadAppSettings(config)
        Catch err As Exception
            Console.WriteLine(err.ToString())
        End Try

    End Sub 'UpdateConfiguration


    ' Update the configuration file using the credentials
    ' of the passed user,  then call the routine that reads 
    ' the configuration settings.
    ' Note that the system issues an error if the user
    ' does not have administrative privileges on the server.
    Public Overloads Shared Sub UpdateConfiguration(ByVal _
        machineName As String, ByVal userName As String, ByVal _
        password As String)
        Try
            Console.WriteLine("MachineName:  [{0}]", machineName)
            Console.WriteLine("UserName:  [{0}]", userName)
            Console.WriteLine("Password:  [{0}]", password)

            ' Get the configuration.
            Dim config As Configuration = _
                WebConfigurationManager.OpenWebConfiguration("/", _
                "Default Web Site", Nothing, machineName, _
                userName, password)


            ' Add a new key/value pair to appSettings
            Dim count As String = _
                config.AppSettings.Settings.Count.ToString()
            config.AppSettings.Settings.Add("key_" + _
                count, "value_" + count)
            ' Save to the file,
            config.Save()

            ' Read the new appSettings.
            ReadAppSettings(config)

        Catch err As Exception
            Console.WriteLine(err.ToString())
        End Try

    End Sub 'UpdateConfiguration


    ' Read the appSettings on the remote server.
    Public Shared Sub ReadAppSettings(ByVal config As Configuration) 
        Try
            Console.WriteLine("--- Printing appSettings at [{0}] ---", _
                config.FilePath)
            Console.WriteLine("Count: [{0}]", _
                config.AppSettings.Settings.Count)
            Dim key As String
            For Each key In  config.AppSettings.Settings.AllKeys
                Console.WriteLine("  [{0}] = [{1}]", _
                    key, config.AppSettings.Settings(key).Value)
            Next key
            Console.WriteLine()

        Catch err As Exception
            Console.WriteLine(err.ToString())
        End Try

    End Sub 'ReadAppSettings
End Class 'RemoteConfiguration

using System;
using System.Configuration;
using System.Web.Configuration;
using System.Collections.Specialized;

namespace Samples.AspNet
{
    // This example dDemonstrates how to access and modify remote 
   // configuration files
    public class RemoteConfiguration
    {

        // The application entry point.
        public static void Main(string[] args)
        {
            // This string  contains the name of 
            // the remote server.
            string machineName = string.Empty;

            // Get the user's input.
            if (args.Length > 0)
            {
                // Get the name of the remote server.
                // The machine name must be in the format
                // accepted by the operating system.
                machineName = args[0];

                // Get the user name and password.
                if (args.Length > 1)     
                {                
                    string userName = args[1];
                    string password = string.Empty;
                    if (args.Length > 2)
                        password = args[2];

                    // Update the site configuration.
                    UpdateConfiguration(machineName, userName, 
                        password);
                }
                else
                { 
                    // Update the site configuration.
                    UpdateConfiguration(machineName);
                }
            }
            else
            {
                Console.WriteLine("Enter a valid server name.");
            }
        }

        // Update the configuration file using the credentials
        // of the user running this application then
        // call the routine that reads the configuration 
        // settings.
        // Note that the system issues an error if the user
        // does not have administrative privileges on the server.
        public static void UpdateConfiguration(string machineName)
        {
            try
            {
                Console.WriteLine("MachineName:  [{0}]", machineName);
                Console.WriteLine("UserDomainName:  [{0}]", 
                    Environment.UserDomainName);
                Console.WriteLine("UserName:  [{0}]", 
                    Environment.UserName);

                // Get the configuration.
                Configuration config = 
                    WebConfigurationManager.OpenWebConfiguration(
                    "/", "Default Web Site", null, machineName);

                // Add a new key/value pair to appSettings.
                string count = 
                    config.AppSettings.Settings.Count.ToString();
                config.AppSettings.Settings.Add("key_" + count, "value_" + count);
                // Save to the file,
                config.Save();

                // Read the new appSettings.
                ReadAppSettings(config);
            }
            catch (Exception err)
            {
                Console.WriteLine(err.ToString());
            }
        }

         // Update the configuration file using the credentials
         // of the passed user. Tthen,
     // call the routine that reads the configuration settings.
        // Note that the system issues an error if the user
        // does not have administrative privileges on the server.
        public static void UpdateConfiguration(string machineName, 
            string userName, string password)
        {
            try
            {
                Console.WriteLine("MachineName:  [{0}]", machineName);
                Console.WriteLine("UserName:  [{0}]", userName);
                Console.WriteLine("Password:  [{0}]", password);

                // Get the configuration.
                Configuration config = 
                    WebConfigurationManager.OpenWebConfiguration(
                    "/", "Default Web Site", null, 
                    machineName, userName, password);


                // Add a new key/value pair to appSettings
                string count =
                    config.AppSettings.Settings.Count.ToString();
                config.AppSettings.Settings.Add("key_" + count, "value_" + count);

             // Save changes to the file.
                config.Save();

                // Read the new appSettings.
                ReadAppSettings(config);

            }
            catch (Exception err)
            {
                Console.WriteLine(err.ToString());
            }
        }

        // Read the appSettings on the remote server.
        public static void ReadAppSettings(
            Configuration config)
        {
            try
            {
                Console.WriteLine("--- Printing appSettings at [{0}] ---", 
                    config.FilePath);
                Console.WriteLine("Count: [{0}]", 
                    config.AppSettings.Settings.Count);
                foreach (string key in config.AppSettings.Settings.AllKeys)
                {
                    Console.WriteLine("  [{0}] = [{1}]", 
                        key, config.AppSettings.Settings[key].Value);
                }
                Console.WriteLine();

            }           
            catch (Exception err)
            {
                Console.WriteLine(err.ToString());
            }
        }
    }

}

L'exemple de code précédent lit et modifie les valeurs de l'élément appSettings configurées pour le Site Web par défaut du serveur. Les valeurs sont ensuite affichées dans la console.

Le code utilise les méthodes suivantes :

  • OpenWebConfiguration, pour ouvrir le fichier de configuration de l'application Web en tant qu'objet Configuration. Notez que l'utilisateur concerné doit posséder des privilèges d'administrateur sur le serveur distant.

  • OpenWebConfiguration, pour ouvrir le fichier de configuration de l'application Web en tant qu'objet Configuration. Notez que l'utilisateur spécifié dans la liste de paramètres doit posséder des privilèges d'administrateur sur le serveur distant.

  • AppSettings, pour accéder à la section relative au site par défaut.

  • GetSection, pour accéder à la section relative à l'identité du site par défaut.

Compilation du code

Pour compiler l'application console, vous devez utiliser la commande suivante.

vbc /out:RemoteConfiguration.exe /t:exe RemoteConfiguration.vb
/r:System.Web.dll /r:System.Configuration.dll
csc /out: RemoteConfiguration.exe /t:exe RemoteConfiguration.cs
/r:System.Web.dll /r:System.Configuration.dll

Sécurité

Pour accéder à un fichier de configuration sur un serveur distant, votre application doit avoir des privilèges d'administrateur sur ce serveur distant.

Remarque :

Il s'agit d'une exigence plus stricte que celle requise pour l'accès aux fichiers de configuration locaux. Pour accéder aux fichiers locaux, l'application a uniquement besoin de privilèges en lecture/écriture et d'un accès en lecture à la métabase IIS pour résoudre le chemin d'accès.

Voir aussi

Concepts

Modification des fichiers de configuration distants ASP.NET

Utilisation des classes de configuration

Vue d'ensemble de la configuration ASP.NET

Référence

System.Configuration

System.Web.Configuration

ASP.NET IIS Registration, outil (Aspnet_regiis.exe)

Autres ressources

Configuration d'applications