Расширяемость конфигурации

Система конфигурации в IIS 7.0 и выше основана на распределенных XML-файлах, содержащих конфигурацию ДЛЯ IIS, ASP.NET и других компонентов; гибкость в системе конфигурации также позволяет настроить конфигурацию на нескольких уровнях, включая сервер, сайт и уровень приложения. Конфигурация на уровне сайта и приложения сосуществует вместе с конфигурацией ASP.NET в файлах web.config.

Одним из аспектов новой системы конфигурации является простота расширения конфигурации. С помощью нескольких простых изменений можно интегрировать пользовательские разделы конфигурации непосредственно в систему конфигурации и управлять этими параметрами с помощью существующих API администрирования. Конфигурация расширяется путем простого определения нового раздела конфигурации в XML-файле схемы, который затем удаляется в каталог %windir%\system32\inetsrv\config\schemaсхемы IIS. Наконец, новый раздел конфигурации должен быть зарегистрирован в глобальном файле конфигурации IIS.

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

Необходимые условия

Для этой статьи существует ряд предварительных требований. К ним относятся:

  1. Установка IIS 7.0 или более поздней версии по умолчанию. Если службы IIS не установлены, установите его, открыв диспетчер серверов и добавив роль веб-сервера (IIS).
  2. Убедитесь, что установлен пакет SDK для .NET Framework. Если у вас нет установленного пакета SDK, получите его из https://www.microsoft.com/downloads
  3. Использование ряда средств в каталоге bin пакета SDK. Используйте командную строку SDK из меню "Пуск" или добавьте директорию bin в путь (например, %systemdrive%\Program Files\Microsoft.NET\SDK\v2.0\Bin)
  4. Выполнение всех команд из командной строки с повышенными привилегиями. Щелкните правой кнопкой мыши команду "Командная строка 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; Если он не установлен, скачайте его с веб-сайтаwww.microsoft.com/downloads.

Ниже приведены необходимые действия.

  1. Создайте каталог, в котором нужно работать и открыть его.

  2. Создайте файл 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()
            {
            }    
        }
    }
    
  3. Мы должны сделать этот модуль строго именованным, чтобы службы IIS использовали его в качестве глобального модуля для всех сайтов. Сначала создайте файл ключа с сильным именем. Откройте командную строку и измените каталог на каталог, содержащий файл SimpleLoggingModule.cs . Затем выполните следующую команду (убедитесь, что каталог bin пакета SDK для .NET Framework находится в вашем пути):

    sn.exe /k keyFile.snk
    

    Если это работает правильно, выходные данные sn.exe говорят что-то вроде "Пара ключей, записанная в keyFile.snk".

  4. Теперь скомпилируйте файл и создайте библиотеку 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
    
  5. Затем поместите скомпилированную сборку (SimpleLoggingModule.dll) в глобальный кэш сборок. Выполните следующую команду из командной строки:

    gacutil.exe /i SimpleLoggingModule.dll
    
  6. Теперь мы должны добавить наш модуль в список модулей, которые могут использоваться IIS. Однако перед этим необходимо получить полное имя только что созданной сборки. Выполните следующую команду в командной строке:

    gacutil.exe /l SimpleLoggingModule
    

    Это выводит примерно следующее:

    SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288, processorArchitecture=MSIL
    
  7. Добавьте модуль в список модулей, которые может использовать 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.

  8. Процесс завершен. Пользовательский модуль, использующий настраиваемую конфигурацию, был настроен. Все, что остается, заключается в том, чтобы проверить его. Инициируйте браузер и перейдите к 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 является обязательным условием для этой статьи. Если он не установлен, скачайте его из www.microsoft.com/downloads.

Ниже приведены действия по созданию com-компонента .NET:

  1. Откройте командную строку и измените каталог, созданный для хранения файлов. Убедитесь, что директория bin .NET Framework находится в вашем пути, а затем выполните следующую команду в командной строке:

    tlbimp %windir%\system32\inetsrv\nativerd.dll /keyfile:keyFile.snk
    

    Средство tlbimp.exe создаст файл с именем AppHostAdminLibrary.dll — это библиотека взаимодействия, которую нам нужно.

  2. Создайте файл 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.

  3. Создайте компонент, выполнив следующую команду из командной строки:

    %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll 
                        ConfigurationExtensibility.cs /keyfile:keyFile.snk
    

    Теперь у вас есть компонент .NET COM — ConfigurationExtensibility.dll.

  4. Зарегистрируйте только что созданный управляемый компонент 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. Код

  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.

  2. Создайте проект еще раз с помощью:

    %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 из командной строки.

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