Поделиться через


Практическое руководство. Удаленный доступ и изменение файлов конфигурации ASP.NET

Обновлен: Ноябрь 2007

Типы System.Configuration и System.Web.Configuration позволяют приложению осуществлять доступ к файлам конфигурации на удаленном сервере. В частности, можно открыть и изменить файл Machine.config или Web.config в любом приложении Microsoft IIS или дочерних каталогах на удаленном сервере. В этом разделе:

  • Демонстрируется настройка удаленного сервера для разрешения доступа к файлам конфигурации сервера со стороны клиентского компьютера.

  • Предоставляет консольное приложение для запуска на клиентском компьютере, которое может считывать и изменять файлы конфигурации сервера.

  • Описываются рекомендации по безопасности, которые необходимо принять во внимание.

Для доступа к файлам конфигурации на удаленном сервере клиентский компьютер должен иметь возможность взаимодействия с сервером. Для включения такого взаимодействия на сервере должен быть установлен удаленный конфигурационный компонент.

Клиентский компьютер затем осуществляет доступ к файлам конфигурации сервера путем вызова интерфейса конфигурации API ASP.NET через удаленный конфигурационный компонент. Дополнительные сведения см. в разделе Редактирование удаленных файлов конфигурации ASP.NET.

ms228054.alert_note(ru-ru,VS.90).gifПримечание.

Если запрошенный файл конфигурации не существует платформа .NET Framework, функционирующая на сервере, возвращает файл конфигурации, состоящий полностью из унаследованных параметров, которые применяются к указанному пути. Если приложение запрашивает обновление, создается новый файл. При запуске консольного приложения необходимо ввести действительное имя сервера. Это происходит потому, что ASP.NET передает имя непосредственно в операционную систему. Необходимо аналогичным образом ввести полное имя пользователя с префиксом имени домена.

Настройка удаленного сервера

  1. Установите удаленный конфигурационный компонент на сервере с использованием инструмента регистрации ASP.NET IIS (Aspnet_regiis.exe) с командой config+, как показано в следующем коде.

    Aspnet_regiis config+
    
  2. Убедитесь (программно или вручную), что файл Web.config веб-узла по умолчанию сервера IIS содержит значения, аналогичные следующим:

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

Обновление удаленных конфигурационных файлов с использованием консольного приложения

  • Запустите консольное приложение, предоставленное в примере кода ниже, для обновления файла Web.config веб-узла по умолчанию на удаленном сервере. В данном примере предполагается, что пользователь, запускающий клиентское приложение, обладает привилегиями администратора на удаленном сервере. Можно использовать любую из двух команд.

    >remoteconfiguration machineName
    >remoteconfiguration machineName domainName\userName password
    

Пример

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

}

Предыдущий пример кода считывает и изменяет значения элемента appSettings, сконфигурированного для веб-узла по умолчанию. Эти значения затем отображаются на консоли.

В данном коде используются следующие методы:

  • OpenWebConfiguration — открытие файла конфигурации веб-приложения как объекта Configuration. Обратите внимание, что подразумеваемый пользователь должен обладать привилегиями администратора на удаленном сервере.

  • OpenWebConfiguration — открытие файла конфигурации веб-приложения как объекта Configuration. Обратите внимание, что пользователь, указанный в списке параметров, должен обладать привилегиями администратора на удаленном сервере.

  • AppSettings — доступ к разделу, связанному с веб-узлом, по умолчанию.

  • GetSection — доступ к разделу идентификации веб-узла по умолчанию.

Компиляция кода

Для компиляции консольного приложения необходимо использовать следующую команду.

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

Безопасность

Для доступа к файлу конфигурации на удаленном сервере приложение должно обладать привилегиями администратора на данном удаленном сервере.

ms228054.alert_note(ru-ru,VS.90).gifПримечание.

Это более строгое ограничение, чем ограничение по доступу к локальным файлам конфигурации. Для доступа к локальным файлам приложению требуются только привилегии на чтение и запись, а также доступ для чтения метабазы IIS в целях разрешения пути.

См. также

Основные понятия

Редактирование удаленных файлов конфигурации ASP.NET

Использование классов конфигурации

Общие сведения о конфигурационном ASP.NET

Ссылки

System.Configuration

System.Web.Configuration

Программа регистрации IIS для ASP.NET (Aspnet_regiis.exe)

Другие ресурсы

Настройка приложений