Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Система конфигурации в IIS 7.0 и выше основана на распределенных XML-файлах, содержащих конфигурацию ДЛЯ IIS, ASP.NET и других компонентов; гибкость в системе конфигурации также позволяет настроить конфигурацию на нескольких уровнях, включая сервер, сайт и уровень приложения. Конфигурация на уровне сайта и приложения сосуществует вместе с конфигурацией ASP.NET в файлах web.config.
Одним из аспектов новой системы конфигурации является простота расширения конфигурации. С помощью нескольких простых изменений можно интегрировать пользовательские разделы конфигурации непосредственно в систему конфигурации и управлять этими параметрами с помощью существующих API администрирования. Конфигурация расширяется путем простого определения нового раздела конфигурации в XML-файле схемы, который затем удаляется в каталог %windir%\system32\inetsrv\config\schemaсхемы IIS. Наконец, новый раздел конфигурации должен быть зарегистрирован в глобальном файле конфигурации IIS.
В этой статье рассматривается пример, в котором используется базовая расширяемость конфигурации и некоторые из более сложных сценариев. Хотя использованный пример искусственно создан, его достаточно, чтобы продемонстрировать возможности расширяемости конфигурации.
Необходимые условия
Для этой статьи существует ряд предварительных требований. К ним относятся:
- Установка IIS 7.0 или более поздней версии по умолчанию. Если службы IIS не установлены, установите его, открыв диспетчер серверов и добавив роль веб-сервера (IIS).
- Убедитесь, что установлен пакет SDK для .NET Framework. Если у вас нет установленного пакета SDK, получите его из https://www.microsoft.com/downloads
- Использование ряда средств в каталоге bin пакета SDK. Используйте командную строку SDK из меню "Пуск" или добавьте директорию bin в путь (например,
%systemdrive%\Program Files\Microsoft.NET\SDK\v2.0\Bin) - Выполнение всех команд из командной строки с повышенными привилегиями. Щелкните правой кнопкой мыши команду "Командная строка SDK" (или "Командная строка") в меню "Пуск" и выберите "Запуск от имени администратора".
Расширяемость конфигурации — основы
Обзор
Чтобы продемонстрировать некоторые основные функции расширяемости конфигурации, мы используем встроенный пример пользовательского модуля ведения журнала. Сам модуль не все, что особенное и просто обрабатывает встроенное событие ведения журнала IIS — LogRequest — и записывает запись журнала в файл на диске; он считается базовой версией ведения журнала IIS.
Расширяемость конфигурации вступает в игру, так как модуль должен знать, где записывать сведения. Модуль должен иметь пользовательский раздел конфигурации, который хранит его конфигурацию, в данном случае - расположение файла журнала.
Шаг 1. Файл схемы
Первым шагом при добавлении нового раздела конфигурации является определение раздела. Определите схему раздела в xml и удалите файл в %windir%\system32\inetsrv\config\schema каталог.
Создайте XML-файл с именемsimpleLogging_Schema.xml и вставьте в него следующее:
<configSchema>
<sectionSchema name="system.webServer/simpleLogging">
<attribute name="logfileDirectory" type="string"
defaultValue="%systemdrive%\inetpub\logs\simpleLogs" expanded="true" encrypted="false" />
</sectionSchema>
</configSchema>
Приведенная выше схема выполняет две действия. Сначала он определяет новый раздел конфигурации с именем "simpleLogging" с помощью элемента <sectionSchema>. Во-вторых, он определяет атрибут этого нового раздела конфигурации с именем LogfileDirectory.
В файле схемы видно, что атрибут является строкой, и система конфигурации не зашифрует ее. Функция expanded="true" сообщает системе конфигурации автоматически расширять переменные среды при использовании. Если вы не создали файл в каталоге %windir%\system32\inetsrv\config\schema , переместите его туда.
Затем создайте каталог по умолчанию, указанный для logfileDirectory, так как он, вероятно, не существует на компьютере. Выполните следующую команду из командной строки, чтобы создать каталог:
md %systemdrive%\inetpub\logs\simpleLogs
Группа Windows IIS_IUSRS должна иметь разрешения на запись в каталог, чтобы модуль SimpleLogging, создаваемый на шаге 4, может записывать в него файлы журналов. Выполните следующую команду в командной строке:
icacls %systemdrive%\inetpub\logs\simpleLogs /grant BUILTIN\IIS_IUSRS:RW
Дополнительные сведения о схеме
Хотя шаг 1 завершен с точки зрения нашего примера, необходимо обсудить файлы схемы. В приведенной выше схеме мы просто создали новый раздел конфигурации simpleLogging , который существует в system.webServer и указали пользовательский атрибут. Однако можно легко создать более сложную настраиваемую конфигурацию с коллекциями, элементами и атрибутами. В следующем списке показаны некоторые примеры, но лучше всего ознакомиться с файлом схемы конфигурации IIS. Найдите его в %windir%\system32\inetsrv\config\schema\IIS\_schema.xml.
атрибут
Сведения о схеме:
<attribute name="" [String, Required] [XML name of the attribute] type="" [bool|enum|flags|uint|int|int64|string|timeSpan, Required] [Runtime type] required="false" [bool] [Indicates if it must be set] isUniqueKey="false" [bool] [Serves as the collection key] isCombinedKey="false" [bool] [Part of a multi-attribute key] defaultValue="" [String] [Default value or comma-delimited flags] encrypted="false" [bool] [Indicates if the value persisted is encrypted] expanded="false" [bool] [Environment variables are expanded when read] allowInfinite="false" [bool] [Indicates if "Infinite" can be set] timeSpanFormat="string" [string|seconds|minutes] [hh:mm:ss or number] validationType="" [See validation below] validationParameter="" [See validation below] />Example:
<configSchema> <sectionSchema name="system.webServer/simpleLogging"> <attribute name="logfileDirectory" type="string" /> </sectionSchema> </configSchema>элемент
Сведения о схеме:
<element name="" [String, Required] [XML name of the element] isCollectionDefault="false" [bool] [Indicates if default values are held for other elements in this collection] />Example:
<configSchema> <sectionSchema name="system.webServer/simpleLogging"> <element name="logfile"> <attribute name="fileLocation" type="string" /> </element> </sectionSchema> </configSchema>коллекция
Сведения о схеме:
<collection addElement="" [String] [Name of Add directive, if supported] removeElement="" [String] [Name of Remove directive, if supported] clearElement="" [String] [Name of Clear directive, if supported] defaultElement="" [applicationDefaults|applicationPoolDefaults|siteDefaults|virtualDirectoryDefaults] mergeAppend="true" [bool] [Indicates whether or not deepest set values are appended] allowDuplicates="false" [bool] [Indicates if multiple elements may have the same key] allowUnrecognizedAttributes="false" [bool] [Indicates if non-schema attributes are ok] />Example:
<configSchema> <sectionSchema name="system.webServer/simpleLogging"> <collection addElement="add"> <attribute name="logfileDirectory" type="string" /> </collection> </sectionSchema> </configSchema>
Шаг 2. Регистрация нового раздела
Теперь, когда был определен новый раздел, сообщите системе конфигурации о разделе. Зарегистрируйте новый раздел в %windir%\system32\inetsrv\config\applicationHost.config файле. Откройте файл и зарегистрируйте раздел simpleLogging, как показано ниже:
<configSections>
...
<sectionGroup name="system.webServer">
<section name="simpleLogging"/>
...
</sectionGroup>
</configSections>
Этот шаг завершен. Раздел определен и зарегистрирован.
Чтобы проверить правильность регистрации раздела, выполните следующую команду из командной строки:
%windir%\system32\inetsrv\appcmd list config –section:system.webServer/simpleLogging
Если все прошло хорошо до сих пор, раздел конфигурации отображается и вы увидите следующее:
<system.webServer>
<simpleLogging />
</system.webServer>
Шаг 3. Настройка конфигурации
Теперь, когда раздел зарегистрирован, задайте конфигурацию как любую другую конфигурацию с помощью файла web.config или задайте ее с помощью средства appcmd.exe в каталоге %windir%\system32\inetsrv\ . Вы также можете задать конфигурацию с помощью любого из API конфигурации. Еще один вариант — задать конфигурацию с помощью нового пользовательского интерфейса администрирования IIS, создав модуль пользовательского интерфейса и вызвав API конфигурации, чтобы задать конфигурацию.
На данный момент настройте конфигурацию, добавив ее в новый файл web.config для веб-сайта IIS, установленного по пути %systemdrive%\inetpub\wwwroot\ и названного "Веб-сайт по умолчанию" в стандартной конфигурации IIS. Создайте файл с именем web.config и добавьте следующее:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" />
</system.webServer>
</configuration>
С помощью командной строки можно добиться того же результата:
%windir%\system32\inetsrv\appcmd set config "Default Web Site" –section:system.webServer/simpleLogging
/logfileDirectory:""%"systemdrive"%"\inetpub\logs\simpleLogs"
Выполните следующую команду, чтобы получить список конфигурации для веб-сайта по умолчанию:
%windir%\system32\inetsrv\appcmd list config "Default Web Site" –section:system.webServer/simpleLogging
Выходные данные примерно так:
<system.webServer>
<simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" />
</system.webServer>
Замечание
Если каталог, указанный для logfileDirectory, не существует, создайте его сейчас. Группа Windows IIS_IUSRS должна иметь разрешения на запись в каталог, чтобы модуль SimpleLogging, создаваемый на следующем шаге, может записывать в него файлы журналов. На шаге 1 выше показана команда командной строки, используемая для задания правильных разрешений в каталоге по умолчанию. Используйте аналогичную команду, если вы создали другой каталог.
Шаг 4. Модуль SimpleLogging
На этом этапе мы расширили систему конфигурации с помощью раздела конфигурации simpleLogging клиента. Мы закругляем представление о базовой расширяемости конфигурации, создавая модуль и показывая, как использовать настраиваемую конфигурацию из него.
Мы создадим строго именованную сборку .NET, которую могут использовать все веб-сайты в IIS. Для этого раздела необходимо использовать некоторые средства из пакета SDK для .NET; Если он не установлен, скачайте его с
Ниже приведены необходимые действия.
Создайте каталог, в котором нужно работать и открыть его.
Создайте файл SimpleLoggingModule.cs и добавьте в него следующий код с помощью текстового редактора:
using System; using System.Web; using System.Web.Hosting; using System.IO; using Microsoft.Web.Administration; namespace ConfigurationExtensibility { public class SimpleLoggingModule : IHttpModule { private string GetlogfileDirectory(HttpContext context) { ConfigurationSection section = WebConfigurationManager.GetSection( context, "system.webServer/simpleLogging"); return (string)section["logfileDirectory"]; } public void Init(HttpApplication context) { context.LogRequest += new EventHandler(LogRequest_EventHandler); } private void LogRequest_EventHandler(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; LogRequest(application.Context); } private void LogRequest(HttpContext context) { string logfileDirectory = GetlogfileDirectory(context); if (Directory.Exists(logfileDirectory) == false) { Directory.CreateDirectory(logfileDirectory); } string logfile = Path.Combine(logfileDirectory, DateTime.Now.ToString("yyyyMMdd") + ".log"); string ogline = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}", DateTime.Now, context.Request.HttpMethod, context.Request.UserHostAddress, context.Request.Url.ToString(), context.Request.ServerVariables["LOGON_USER"], context.Request.UserAgent, context.Response.StatusCode, HostingEnvironment.SiteName); File.AppendAllText(logfile, ogline + Environment.NewLine); } public void Dispose() { } } }Мы должны сделать этот модуль строго именованным, чтобы службы IIS использовали его в качестве глобального модуля для всех сайтов. Сначала создайте файл ключа с сильным именем. Откройте командную строку и измените каталог на каталог, содержащий файл SimpleLoggingModule.cs . Затем выполните следующую команду (убедитесь, что каталог bin пакета SDK для .NET Framework находится в вашем пути):
sn.exe /k keyFile.snkЕсли это работает правильно, выходные данные sn.exe говорят что-то вроде "Пара ключей, записанная в keyFile.snk".
Теперь скомпилируйте файл и создайте библиотеку DLL. Выполните следующую команду из командной строки:
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library SimpleLoggingModule.cs /r:System.Web.dll /r:%windir%\system32\inetsrv\Microsoft.Web.Administration.dll /keyfile:keyFile.snkЗатем поместите скомпилированную сборку (SimpleLoggingModule.dll) в глобальный кэш сборок. Выполните следующую команду из командной строки:
gacutil.exe /i SimpleLoggingModule.dllТеперь мы должны добавить наш модуль в список модулей, которые могут использоваться IIS. Однако перед этим необходимо получить полное имя только что созданной сборки. Выполните следующую команду в командной строке:
gacutil.exe /l SimpleLoggingModuleЭто выводит примерно следующее:
SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288, processorArchitecture=MSILДобавьте модуль в список модулей, которые может использовать IIS. Выполните приведенную ниже команду. Однако убедитесь, что переменные заменяются выходными данными последней команды.
%windir%\system32\inetsrv\appcmd add module /name:"SimpleLoggingModule" /type:"ConfigurationExtensibility.SimpleLoggingModule, SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288"Это добавляет необходимую запись конфигурации в файл applicationHost.config — глобальный файл конфигурации IIS.
Процесс завершен. Пользовательский модуль, использующий настраиваемую конфигурацию, был настроен. Все, что остается, заключается в том, чтобы проверить его. Инициируйте браузер и перейдите к http://localhost/. Вы увидите следующее:
Если появляется ошибка, убедитесь, что вы предоставили группе IIS_IUSRS разрешения на запись в каталог.
Откройте %systemdrive%\inetpub\logs\simpleLogs (или любой каталог, используемый в конфигурации), и у вас есть файл .log с текущей датой. Откройте файл и увидите следующее:
Поэкспериментируйте с конфигурацией, чтобы убедиться, что она работает. Попробуйте удалить раздел simpleLogging из файла web.config и проверьте, направляются ли журналы в расположение по умолчанию (просто убедитесь, что у пользователя ASPNET есть правильные разрешения).
Замечание
Созданный модуль предназначен только для демонстрационных целей и не должен использоваться в рабочей среде. Это приведет к сбою, если одновременно несколько запросов пытаются записать в журнал.
Расширяемость конфигурации — более сложные сценарии
Обзор
В предыдущем разделе рассматриваются основы расширяемости конфигурации— просто расширение конфигурации с помощью схемы. Однако при расширении конфигурации доступно больше энергии.
Во-первых, существует возможность расширения конфигурации для использования COM-объектов для получения конфигурации, что позволяет хранить сведения о конфигурации везде, где бы вы ни хотели, не беспокоясь о том, что API конфигурации не могут считывать его.
Во-вторых, есть возможность определять методы для управления конфигурацией и выполнения операций над ней. Затем эти методы можно вызывать с помощью существующих API конфигурации. Вместе эти две функции обеспечивают мощную поддержку создания пользовательских расширений конфигурации.
В этом разделе сначала рассматривается изменение пользовательской конфигурации simpleLogging из первой части этой статьи для получения значений конфигурации с помощью COM-компонента. Затем он рассматривает добавление метода конфигурации, поддерживаемого com-компонентом, выполняющим действия.
Расширение конфигурации — атрибут, поддерживаемый COM
Этот раздел расширяет схему, добавляя атрибут, называемый "logfileCount". Этот атрибут конфигурации основывается на сборке .NET (управляемой библиотеке DLL, запрограммированной на C#), которая подсчитывает количество файлов журнала в каталоге журнала; это надуманный сценарий, но он может оказаться полезным для некоторых.
Замечание
Вам не нужно создавать компонент .NET — любой допустимый COM-компонент подойдет.
Шаг 1. Создание и регистрация com-компонента .NET
Сначала необходимо создать .NET COM-компонент. Создайте каталог для хранения файлов, которые мы создадим, и компонент, который мы создадим и откройте его.
Создаваемый компонент должен реализовать некоторые интерфейсы, предоставляемые через COM системой конфигурации IIS. Чтобы использовать COM-интерфейс из компонента .NET, необходимо создать interop dll. Это позволяет системе конфигурации IIS взаимодействовать с компонентом, когда она должна получить значение для атрибута logfileCount. Чтобы создать interop dll, используйте средство из пакета SDK .NET Framework с именем tlbimp.exe. Установка Visual Studio или пакета SDK для .NET является обязательным условием для этой статьи. Если он не установлен, скачайте его из
Ниже приведены действия по созданию com-компонента .NET:
Откройте командную строку и измените каталог, созданный для хранения файлов. Убедитесь, что директория bin .NET Framework находится в вашем пути, а затем выполните следующую команду в командной строке:
tlbimp %windir%\system32\inetsrv\nativerd.dll /keyfile:keyFile.snkСредство tlbimp.exe создаст файл с именем AppHostAdminLibrary.dll — это библиотека взаимодействия, которую нам нужно.
Создайте файл ConfigurationExtensibility.cs в созданном ранее каталоге и скопируйте следующий код C# в файл с помощью текстового редактора:
using System; using System.IO; using System.Runtime.InteropServices; using AppHostAdminLibrary; namespace ConfigurationExtensibility { [ComVisible(true)] public class SimpleLoggingExtension : IAppHostPropertyExtension { public void ProvideGetProperty(IAppHostElement pElement, IAppHostProperty pProperty) { switch(pProperty.Name) { case "logfileCount": string logDirectory = (string) pElement.Properties["logfileDirectory"].Value; if(Directory.Exists(logDirectory)) pProperty.Value = Directory.GetFiles(logDirectory, "????????.log").Length; else pProperty.Value = 0; break; } } } }Замечание
У нас есть класс, реализующий интерфейс IAppHostPropertyExtension . Сам код считывает атрибут logfileDirectory, чтобы получить каталог logfile, а затем подсчитывает все файлы, соответствующие шаблону имени файла для файлов журнала, созданных SimpleLoggingModule.
Создайте компонент, выполнив следующую команду из командной строки:
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll ConfigurationExtensibility.cs /keyfile:keyFile.snkТеперь у вас есть компонент .NET COM — ConfigurationExtensibility.dll.
Зарегистрируйте только что созданный управляемый компонент COM. Выполните следующую команду в командной строке:
%windir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /register /codebase ConfigurationExtensibility.dllЭто регистрирует COM-компонент в реестре. Вы создали и зарегистрировали com-компонент .NET, который может использовать система конфигурации.
Шаг 2. Обновление файла схемы
Затем измените файлsimpleLogging_Schema.xml , созданный ранее. Откройте файл и измените его, чтобы выглядеть следующим образом (новый атрибут выделен полужирным шрифтом):
<configSchema>
<sectionSchema name="system.webServer/simpleLogging">
<attribute name="logfileDirectory" type="string"
defaultValue="%systemdrive%\inetpub\logs\simpleLogs\" expanded="true" encrypted="false" />
<attribute name="logfileCount" type="int" extension="ConfigurationExtensibility.SimpleLoggingExtension" />
</sectionSchema>
</configSchema>
Шаг 3. Тестирование
Всё должно работать сейчас правильно — всё, что остаётся, это тестирование. Чтобы протестировать расширение, используйте простой сценарий. Создайте файл SimpleLoggingTest.vbs и введите следующий текст:
Dim adminManager, section
Set adminManager = WScript.Createobject("Microsoft.ApplicationHost.AdminManager")
Set section = adminManager.GetAdminSection("system.webServer/simpleLogging",
"MACHINE/WEBROOT/APPHOST/Default Web Site")
WScript.Echo(section.Properties.Item("logfileCount").Value)
На этом этапе должен быть один файл журнала из тестирования SimpleLoggingModule ранее. Запустите скрипт из командной строки. Вы видите результат 1.
Расширение конфигурации — метод, поддерживаемый COM
Наконец, в этой статье рассматривается расширение конфигурации с помощью метода. Методы конфигурации — это операции, которые система конфигурации может вызывать для выполнения таких действий, как изменение конфигурации или удаление файлов журналов. Это то, что будет делать этот метод. В этом примере мы добавим метод для удаления всех файлов журналов, созданных SimpleLoggingModule.
Шаг 1. Код
Сначала добавьте необходимый код для метода. Откройте файл ConfigurationExtensibility.cs, созданный ранее, и обновите его, чтобы выглядеть следующим образом (новый код полужирным шрифтом):
using System; using System.IO; using System.Runtime.InteropServices; using AppHostAdminLibrary; namespace ConfigurationExtensibility { [ComVisible(true)] public class SimpleLoggingExtension : IAppHostPropertyExtension, IAppHostMethodExtension { public void ProvideGetProperty(IappHostElement pElement, IappHostProperty pProperty) { switch(pProperty.Name) { case "logfileCount": string logDirectory = (string) pElement.Properties["logfileDirectory"].Value; if(Directory.Exists(logDirectory)) pProperty.Value = Directory.GetFiles(logDirectory, "????????.log").Length; else pProperty.Value = 0; break; } } public void ProvideMethod(IappHostMethod pMethod, IappHostMethodInstance pMethodInstance, IappHostElement pElement) { switch(pMethod.Name) { case "deleteLogs": string logDirectory = (string) pElement.Properties["logfileDirectory"].Value; if(Directory.Exists(logDirectory)) { foreach(string logFile in Directory.GetFiles(logDirectory, "????????.log")) { File.Delete(logFile); } } break; } } } }Замечание
Мы реализовали интерфейс IAppHostMethodExtension . Этот интерфейс имеет один метод с именем ProvideMethod , который логически предоставляет этот метод. Когда кто-то вызывает метод (см. шаг 3, чтобы сделать это), система конфигурации вызывает параметр ProvideMethod и передает параметры, один из которых имеет имя вызываемого метода; в приведенном выше коде мы обрабатываем только метод deleteLogs.
Создайте проект еще раз с помощью:
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll ConfigurationExtensibility.cs /keyfile:keyFile.snk
Шаг 2. Обновление схемы
Затем сообщите схеме о новом методе. На этом этапе вы должны быть достаточно знакомы с файломsimpleLogging_Schema.xml , поэтому откройте его снова и измените его на следующий вид:
<configSchema>
<sectionSchema name="system.webServer/simpleLogging">
<attribute name="logfileDirectory" type="string"
defaultValue="c:\inetpub\logs\simpleLogs\" expanded="true" encrypted="false" />
<attribute name="logfileCount" type="int" extension="ConfigurationExtensibility.SimpleLoggingExtension" />
<method name="deleteLogs" extension="ConfigurationExtensibility.SimpleLoggingExtension" />
</sectionSchema>
</configSchema>
Изменение определило новый метод с именем deleteLogs и сообщает конфигурации, где искать метод.
Шаг 3. Тестирование
Наконец, проверьте, работает ли метод. Быстрый и простой способ сделать это заключается в написании простого скрипта VB. Ниже приведен пример скрипта, который выводит logfileCount, а затем вызывает наш метод и выводит logfileCount. Просто обновите созданный ранее файл SimpleLoggingTest.vbs и введите следующее:
Dim adminManager, section
Set adminManager = WScript.Createobject("Microsoft.ApplicationHost.AdminManager")
Set section = adminManager.GetAdminSection("system.webServer/simpleLogging", "MACHINE/WEBROOT/APPHOST/Default Web Site")
WScript.Echo(section.Properties.Item("logfileCount").Value)
section.Methods.Item("deleteLogs").CreateInstance().Execute()
WScript.Echo(section.Properties.Item("logfileCount").Value)
Запустите скрипт из командной строки и получите выходные данные:
1
0
Вышеприведенное краткое описание того, как предоставлять новые настройки и методы конфигурации на основе COM-компонентов. Как вы, вероятно, обнаружили, расширение конфигурации с помощью этого метода очень эффективно.
Расширяемость конфигурации — расширение существующей конфигурации
Последним аспектом расширения конфигурации является возможность расширения существующих разделов конфигурации, таких как system.webServer/sites , или расширение раздела system.webServer/simpleLogging , созданного в предыдущих двух разделах.
Расширение существующего раздела конфигурации так же просто, как создание нового. Просто определите схему как XML и поместите файл схемы в %windir%\system32\inetsrv\config\schema\ каталог. Это должно звучать знакомо, так как мы сделали это ранее более одного раза.
Расширение конфигурации "сайты"
Чтобы лучше показать, как расширить существующий раздел конфигурации, мы расширим раздел system.applicationHost/sites — раздел конфигурации, используемый для определения сайтов. Мы расширяем раздел сайтов, добавив атрибут "владельца" и атрибут "ownerEmail". Атрибуты, такие как эти, полезны при размещении нескольких сайтов на одном сервере, если нужно отслеживать владельцев различных сайтов.
Сначала создайте файл схемы. Создайте файлsiteExtension_schema.xml в каталоге %windir%\system32\inetsrv\config\schema\ и введите следующий текст:
<configSchema>
<sectionSchema name="system.applicationHost/sites">
<collection addElement="site">
<attribute name="owner" type="string" />
<attribute name="ownerEmail" type="string" />
</collection>
</sectionSchema>
</configSchema>
При расширении схемы существующего раздела просто создайте <sectionSchema> элемент и задайте атрибут имени таким же, как и существующий раздел. В приведенном выше файле схемы мы определили <разделSchema> с именем system.applicationHost/sites — это то же самое, что имя sectionSchema в файле IIS_Schema.xml в каталоге схемы.
Проверьте наши изменения, добавив значения для атрибутов "owner" и ownerEmail, а затем проверьте файл конфигурации, чтобы просмотреть изменения. Просто выполните следующую команду из командной строки:
%windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"
Чтобы узнать, была ли применена конфигурация, выполните следующую команду и проверьте выходные данные:
%windir%\system32\inetsrv\appcmd list site "Default Web Site" /config
Выходные данные должны быть примерно следующими:
<system.applicationHost>
<sites>
...
<site name="Default Web Site" id="1" siteOwner="John Contoso" siteOwnerEmail="john@contoso.com">
...
...
</site>
</sites>
</system.applicationHost>
Замечание
Если вы сейчас перейдете к http://localhost/, вы можете получить сообщение об ошибке сервера 500.19. Эта известная проблема и будет устранена в последующей сборке IIS. Чтобы обойти эту проблему, запустите iisreset из командной строки.
Это завершает просмотр расширяемости конфигурации. Надеюсь, вы можете использовать расширяемость конфигурации интересным способом после прочтения предыдущих примеров.