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
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+
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
ASP.NET IIS Registration, outil (Aspnet_regiis.exe)