Практическое руководство. Удаленный доступ и изменение файлов конфигурации ASP.NET
Обновлен: Ноябрь 2007
Типы System.Configuration и System.Web.Configuration позволяют приложению осуществлять доступ к файлам конфигурации на удаленном сервере. В частности, можно открыть и изменить файл Machine.config или Web.config в любом приложении Microsoft IIS или дочерних каталогах на удаленном сервере. В этом разделе:
Демонстрируется настройка удаленного сервера для разрешения доступа к файлам конфигурации сервера со стороны клиентского компьютера.
Предоставляет консольное приложение для запуска на клиентском компьютере, которое может считывать и изменять файлы конфигурации сервера.
Описываются рекомендации по безопасности, которые необходимо принять во внимание.
Для доступа к файлам конфигурации на удаленном сервере клиентский компьютер должен иметь возможность взаимодействия с сервером. Для включения такого взаимодействия на сервере должен быть установлен удаленный конфигурационный компонент.
Клиентский компьютер затем осуществляет доступ к файлам конфигурации сервера путем вызова интерфейса конфигурации API ASP.NET через удаленный конфигурационный компонент. Дополнительные сведения см. в разделе Редактирование удаленных файлов конфигурации ASP.NET.
Примечание. |
---|
Если запрошенный файл конфигурации не существует платформа .NET Framework, функционирующая на сервере, возвращает файл конфигурации, состоящий полностью из унаследованных параметров, которые применяются к указанному пути. Если приложение запрашивает обновление, создается новый файл. При запуске консольного приложения необходимо ввести действительное имя сервера. Это происходит потому, что ASP.NET передает имя непосредственно в операционную систему. Необходимо аналогичным образом ввести полное имя пользователя с префиксом имени домена. |
Настройка удаленного сервера
Установите удаленный конфигурационный компонент на сервере с использованием инструмента регистрации ASP.NET IIS (Aspnet_regiis.exe) с командой config+, как показано в следующем коде.
Aspnet_regiis config+
Убедитесь (программно или вручную), что файл 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
Безопасность
Для доступа к файлу конфигурации на удаленном сервере приложение должно обладать привилегиями администратора на данном удаленном сервере.
Примечание. |
---|
Это более строгое ограничение, чем ограничение по доступу к локальным файлам конфигурации. Для доступа к локальным файлам приложению требуются только привилегии на чтение и запись, а также доступ для чтения метабазы IIS в целях разрешения пути. |
См. также
Основные понятия
Редактирование удаленных файлов конфигурации ASP.NET
Использование классов конфигурации
Общие сведения о конфигурационном ASP.NET
Ссылки
Программа регистрации IIS для ASP.NET (Aspnet_regiis.exe)