Condividi tramite


Procedura: accedere e modificare i file di configurazione ASP.NET in remoto

Aggiornamento: novembre 2007

I tipi System.Configuration e System.Web.Configuration consentono all'applicazione di accedere ai file di configurazione di un server remoto. In particolare è possibile aprire e modificare il file Machine.config o un file Web.config in tutte le applicazioni Microsoft Internet Information Services (IIS) o nelle relative directory figlio presenti in un server remoto. In questo argomento:

  • Viene illustrato come impostare il server remoto per consentire a un computer client di accedere ai file di configurazione del server.

  • Viene fornita un'applicazione console, da eseguire sul computer client, in grado di leggere o modificare i file di configurazione del server.

  • Vengono esposte le considerazioni sulla sicurezza da tenere presenti.

Per accedere ai file di configurazione di un server remoto, il computer client deve essere in grado di comunicare con il server. Per consentire questo tipo di comunicazione, è necessario installare nel server un componente di configurazione remota.

Il computer client accede quindi ai file di configurazione del server chiamando l'API di configurazione ASP.NET attraverso il componente di configurazione remota. Per ulteriori informazioni, vedere Modifica dei file di configurazione remota ASP.NET.

Nota:

Se il file di configurazione richiesto non esiste, .NET Framework in esecuzione sul server restituirà un file di configurazione interamente costituito da impostazioni ereditate che si applicano al percorso specificato. Se l'applicazione richiede un aggiornamento, verrà creato un nuovo file. Durante l'esecuzione dell'applicazione console, è necessario immettere un nome valido per il server in quanto ASP.NET passa tale nome direttamente al sistema operativo. Analogamente, è necessario immettere un nome utente completo con il prefisso del nome di dominio.

Per configurare il server remoto

  1. Installare il componente di configurazione remota nel server utilizzando lo strumento di ASP.NET per la registrazione di IIS (Aspnet_regiis.exe) con il comando config+, come illustrato nel codice riportato di seguito.

    Aspnet_regiis config+
    
  2. Assicurarsi, a livello di codice o manualmente, che il file Web.config di "Sito Web predefinito" del server IIS contenga valori simili ai seguenti:

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

Per aggiornare i file di configurazione remota mediante un'applicazione console

  • Eseguire l'applicazione console fornita nell'esempio di codice riportato di seguito per aggiornare il file Web.config di Sito Web predefinito nel server remoto. In questo esempio si suppone che l'utente, che esegue l'applicazione client, disponga di privilegi di amministratore per il server remoto. È possibile utilizzare uno di questi due comandi.

    >remoteconfiguration machineName
    >remoteconfiguration machineName domainName\userName password
    

Esempio

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

}

Nell'esempio di codice precedente vengono letti e modificati i valori dell'elemento appSettings configurato per Sito Web predefinito del server. Tali valori vengono quindi visualizzati nella console.

Nel codice vengono utilizzati i seguenti metodi:

  • OpenWebConfiguration, per aprire il file di configurazione dell'applicazione Web come un oggetto Configuration. Si noti che l'utente implicito deve disporre di privilegi di amministratore per il server remoto.

  • OpenWebConfiguration, per aprire il file di configurazione dell'applicazione Web come un oggetto Configuration. Si noti che l'utente specificato nell'elenco dei parametri deve disporre di privilegi di amministratore per il server remoto.

  • AppSettings, per accedere alla sezione relativa al sito predefinito.

  • GetSection, per accedere alla sezione relativa all'identità del sito predefinito.

Compilazione del codice

Per compilare l'applicazione console, è necessario utilizzare il comando riportato di seguito.

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

Sicurezza

Per accedere a un file di configurazione di un server remoto, è necessario che l'applicazione disponga di privilegi di amministratore per il server remoto.

Nota:

Si tratta di un requisito più rigido di quello necessario per accedere ai file di configurazione locali. Per accedere ai file locali, infatti, l'applicazione necessita solo di privilegi di lettura/scrittura e di accesso in lettura alla metabase IIS per risolvere il percorso.

Vedere anche

Concetti

Modifica dei file di configurazione remota ASP.NET

Utilizzo delle classi di configurazione

Cenni preliminari sulla configurazione di ASP.NET

Riferimenti

System.Configuration

System.Web.Configuration

Strumento di ASP.NET per la registrazione di IIS (Aspnet_regiis.exe)

Altre risorse

Configurazione di applicazioni