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


Создание простого модуля диспетчера IIS

Карлос Агилар Марес

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

  • Создание проекта в Microsoft Visual Studio или Microsoft Visual C# Express для использования библиотеки в InetMgr
  • Создание простого поставщика модулей
  • Создание простого модуля, отображающего окно сообщения.

Задача 1. Создание проекта

Чтобы создать модуль расширяемости для InetMgr, необходимо создать проект DLL, также известный как проект библиотеки классов. Эта библиотека DLL должна иметь строгое имя, чтобы ее можно было зарегистрировать в глобальном кэше сборок, что является обязательным требованием для модулей, используемых InetMgr.

  1. Нажмите кнопку Пуск, выберите Программы и запустите Microsoft Visual Studio 2005 или Microsoft Visual C# 2005 Express Edition.

  2. В меню Файл выберите пункт Создать проект.

  3. В диалоговом окне Новый проект выберите Библиотека классов в качестве типа проекта и введите ExtensibilityDemo в качестве имени проекта. Нажмите кнопку ОК.

    Снимок экрана: окно

  4. Удалите файл Class1.cs, добавленный по умолчанию (так как мы не будем использовать этот файл), используя параметр контекстного меню Удалить в Обозреватель решений.

  5. С помощью параметра Добавить ссылку... в меню Проект добавьте ссылку на Microsoft.Web.Management.dll с помощью вкладки Обзор и найдите ее в каталоге \Windows\system32\inetsrv . Это библиотека DLL, содержащая все классы расширяемости, необходимые для создания модулей для InetMgr.

    Так как мы используем код для создания пользовательского интерфейса на основе WinForms, необходимо добавить ссылку на System.Windows.Forms.dll; Для этого используйте параметр Добавить ссылку... в меню Проект и выберите System.Windows.Forms.dll в the.NET списке сборок.

    Одно из требований к библиотекам, используемым в InetMgr, заключается в том, что они должны быть зарегистрированы в GAC. Убедитесь, что библиотека DLL имеет строгое имя (иногда называется Signed). Visual Studio предлагает простой способ создания и создания новых имен. В меню Проект выберите параметр ExtensibilityDemo Properties.

  6. На вкладке Подписывание проверка поле Подписывание сборки проверка.

  7. В поле со списком выберите параметр <Создать...> , чтобы создать новый ключ. В диалоговом окне Создание ключа строгого имени введите DemoKey.snk в качестве имени ключа и снимите флажок Защитить файл ключа с помощью пароля проверка. Нажмите кнопку ОК.

    Снимок экрана: диалоговое окно

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

    Снимок экрана: вкладка подписывания.

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

  8. Перейдите на вкладку События сборки и добавьте следующую командную строку события после сборки :

    CALL "%VS80COMNTOOLS%\vsvars32.bat" > NULL
    gacutil.exe /if "$(TargetPath)"
    

    Снимок экрана: вкладка

    (Необязательно) Если вы используете Microsoft Visual Studio 2005, настройте отладку правильно, чтобы можно было использовать клавишу F5 для выполнения кода. В свойствах проекта выберите вкладку Отладка и задайте для нее запуск внешней программы, выбрав \windows\system32\inetsrv\inetmgr.exe.

    Снимок экрана: вкладка

  9. Закройте свойства проекта, выберите параметр Сохранить все в меню Файл и задайте расположение d:\Demos. Нажмите Сохранить.

    Снимок экрана: диалоговое окно

    Теперь можно скомпилировать проект с помощью команды Сборка решения в меню Сборка. Это автоматически создаст библиотеку DLL и добавит ее в GAC.

    Примечание

    Если команда для установки vsvars32.bat не работает с кодом ошибки 9009, замените команду, добавленную в событиях Post Build на шаге 8, добавив полный путь к gacutil.exe, например:

    "D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if "$(TargetPath)"
    

Задача 2. Создание поставщика модуля

В этой задаче создается поставщик модулей; это main точка входа для регистрации модулей в InetMgr. Эти поставщики модулей перечислены в Administration.config.

  1. Выберите параметр Добавить новый элемент в меню Проект. В диалоговом окне Добавление нового элемента выберите шаблон Класс и введите DemoModuleProvider.cs в качестве имени файла.

    Снимок экрана: окно добавления нового элемента. Выделен значок Класса.

  2. Измените код так, чтобы он выглядел следующим образом:

    using System;
    using System.Security;
    using Microsoft.Web.Management.Server;
    namespace ExtensibilityDemo {
        class DemoModuleProvider : ModuleProvider {
            public override Type ServiceType {
                get { return null; }
            }
            public override ModuleDefinition GetModuleDefinition(IManagementContext context) {
                return new ModuleDefinition(Name, typeof(DemoModule).AssemblyQualifiedName);
            }
            public override bool SupportsScope(ManagementScope scope) {
                return true;
            }
        }
    }
    

Этот код создает ModuleProvider, который поддерживает все типы подключений (сервер, сайт и приложение), и регистрирует клиентский модуль с именем DemoModule.

Задача 3. Создание модуля

В этой задаче вы узнаете, как создать модуль. Модуль — это main точка входа в клиенте для всех объектов расширяемости. У него есть один метод main с именем Initialize. Это метод, в котором происходит все действие.

  1. Выберите параметр Добавить новый элемент в меню проекта. Выберите шаблон Класс и введите DemoModule.cs в качестве имени файла.

  2. Измените код так, чтобы он выглядел следующим образом:

    using System;
    using System.Windows.Forms;
    using Microsoft.Web.Management.Client;
    using Microsoft.Web.Management.Server;
    
    namespace ExtensibilityDemo {
        internal class DemoModule : Module {
            protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo) {
                base.Initialize(serviceProvider, moduleInfo);
                 MessageBox.Show("Hello World Inside InetMgr");
            }
        }
    }
    

Задача 4. Тестирование модуля

В этой задаче вы добавите новый модуль, который вы создали. Для этого необходимо добавить его в файл administration.config в списке moduleProviders.

Во-первых, необходимо выяснить полное имя только что созданной сборки. Он имеет вид "ExtensibilityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken={YourKey}". Используйте windows Обозреватель, чтобы найти его.

  1. Откройте windows Обозреватель и перейдите в папку *Windows\Assembly*.

  2. Найдите ExtensibilityDemo в списке сборок, щелкните его правой кнопкой мыши и выберите свойства. В диалоговом окне появится поле с именем Токен открытого ключа; Нам нужно это значение, чтобы зарегистрировать его в InetMgr, поэтому скопируйте его в буфер обмена.

    Снимок экрана: диалоговое окно

  3. Вернитесь в Microsoft Visual C# 2005 Express и выберите параметр Открыть файл... в меню "Файл". Найдите \Windows\System32\InetSrv\Administration.config файла.

  4. Найдите <раздел moduleProviders> и добавьте следующий код, но обязательно замените маркер открытого ключа на маркер, скопированный на шаге 2.

    <moduleProviders>
      <add name="ExtensibilityDemo" type="ExtensibilityDemo.DemoModuleProvider, ExtensibilityDemo, 
                              Version=1.0.0.0, Culture=neutral, PublicKeyToken=bed679b1975c7f97" />
    <moduleProviders>
    

    Примечание

    Добавляя его только в список moduleProviders, вы регистрируете модуль только для подключений к серверу. Если вы хотите включить этот модуль для подключений сайта и приложений, добавьте его в следующий список:

    <location path=".">
      <module>
        <add name="ExtensibilityDemo" />
    </location>
    
  5. Сохраните файл и запустите InetMgr, подключитесь к localhost, и вы увидите следующее сообщение:

    Снимок экрана: начальная страница I IS с примером диалогового окна сообщения.

Итоги

В этой статье объясняется, как создать проект Visual Studio для разработки модулей расширяемости для нового средства управления IIS. Мы создали простой ModuleProvider и его аналог Module для отображения сообщения.

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