Cómo: Obtener acceso y modificar de manera remota los archivos de configuración de ASP.NET
Actualización: noviembre 2007
Los tipos System.Configuration y System.Web.Configuration permiten a la aplicación obtener acceso a los archivos de configuración en un servidor remoto. En particular, se puede abrir y modificar en un servidor remoto el archivo Machine.config o Web.config en cualquier aplicación de Microsoft Internet Information Services (IIS) o sus directorios secundarios. En este tema:
Se muestra cómo configurar el servidor remoto para que un equipo cliente pueda obtener acceso a los archivos de configuración del servidor.
Se proporciona una aplicación de consola que se ejecuta en el equipo cliente y que puede leer o modificar los archivos de configuración del servidor.
Se abordan las consideraciones de seguridad que deben tenerse en cuenta.
Para obtener acceso a los archivos de configuración en un servidor remoto, el equipo cliente debe poder comunicar con el servidor. Para habilitar esta comunicación, debe haber un componente de configuración remota instalado en el servidor.
Entonces, el equipo cliente podrá obtener acceso a los archivos de configuración del servidor llamando a la API de configuración de ASP.NET a través del componente de configuración remota. Para obtener más información, vea Editar los archivos de configuración remotos de ASP.NET.
Nota: |
---|
Si no existe el archivo de configuración solicitado, .NET Framework, que se ejecuta en el servidor, devolverá un archivo de configuración que se componga en su totalidad de opciones de configuración heredadas que se aplican a la ruta de acceso especificada. Si la aplicación solicita una actualización, se creará un nuevo archivo. Al ejecutar la aplicación de consola, deberá escribir un nombre de servidor válido. Esto es porque ASP.NET pasa directamente este nombre al sistema operativo. Asimismo, deberá especificar un nombre de usuario completo con el prefijo del nombre de dominio. |
Para configurar el servidor remoto
Instale el componente de configuración remota en el servidor mediante la herramienta Registro de IIS para ASP.NET (Aspnet_regiis.exe) con el comando config+, tal y como se muestra en el siguiente código.
Aspnet_regiis config+
Mediante programación o manualmente, asegúrese de que el archivo Web.config del "sitio Web predeterminado" del servidor de IIS contiene valores similares a los siguientes:
<appSettings> <add key="keyName1", value = "this entry value"/> <add key="keyName2", value = "this entry value"/> <add key="keyName3", value = "this entry value"/> </appSettings>
Para actualizar los archivos de configuración remotos mediante una aplicación de consola
Ejecute la aplicación de consola proporcionada en el ejemplo de código siguiente para actualizar el archivo Web.config del sitio Web predeterminado en el servidor remoto. En este ejemplo se supone que el usuario que ejecuta la aplicación cliente tiene privilegios administrativos en el servidor remoto. Puede utilizar cualquiera de estos dos comandos.
>remoteconfiguration machineName >remoteconfiguration machineName domainName\userName password
Ejemplo
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());
}
}
}
}
En el ejemplo de código anterior se leen y se modifican los valores del elemento appSettings configurados para el sitio Web predeterminado del servidor. A continuación, se muestran los valores en la consola.
El código utiliza los métodos siguientes:
OpenWebConfiguration para abrir el archivo de configuración de la aplicación Web como un objeto Configuration. Observe que el usuario implicado debe tener privilegios administrativos en el servidor remoto.
OpenWebConfiguration para abrir el archivo de configuración de la aplicación Web como un objeto Configuration. Tenga en cuenta que el usuario especificado en la lista de parámetros debe tener privilegios administrativos en el servidor remoto.
AppSettings para obtener acceso a la sección relacionada con el sitio predeterminado.
GetSection para obtener acceso a la sección de identidad del sitio predeterminado.
Compilar el código
Para compilar la aplicación de consola, debe utilizar el comando siguiente.
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
Seguridad
Para obtener acceso a un archivo de configuración en un servidor remoto, la aplicación debe tener privilegios administrativos en ese servidor remoto.
Nota: |
---|
Éste es un requisito más estricto que el requerido para obtener acceso a los archivos de configuración locales. Para obtener acceso a los archivos locales, la aplicación sólo necesita privilegios de lectura y escritura así como acceso de lectura a la metabase de IIS para resolver la ruta de acceso. |
Vea también
Conceptos
Editar los archivos de configuración remotos de ASP.NET
Utilizar las clases Configuration
Información general sobre la configuración de ASP.NET
Referencia
Herramienta Registro de IIS en ASP.NET (Aspnet_regiis.exe)