Использование управляемого кода (C#) для создания простого поставщика домашнего каталога FTP

Роберт Макмюррей

Корпорация Майкрософт создала новую службу FTP, которая была полностью перезаписана для Windows Server® 2008. Эта новая служба FTP включает множество новых функций, позволяющих веб-авторам публиковать содержимое проще, чем раньше, и предлагает веб-администраторам больше возможностей безопасности и развертывания.

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

В этом пошаговом руководстве вы узнаете, как использовать управляемый код для создания простого поставщика домашнего каталога FTP.

Необходимые компоненты

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

  1. На сервере Windows Server 2008 должны быть установлены службы IIS 7.0 или более поздней версии, а также должен быть установлен диспетчер службы IIS (IIS).

  2. Необходимо установить новую службу FTP 7.5.

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

  4. Необходимо использовать Visual Studio 2008.

    Примечание.

    Если вы используете более раннюю версию Visual Studio, некоторые из шагов, описанных в этом пошаговом руководстве, могут быть неверными.

  5. Необходимо создать домашний каталог для каждого пользователя; Пример кода используется C:\Ftpusers\%*UserName*%, но при необходимости можно изменить его.

Шаг 1. Настройка среды проекта

На этом шаге вы создадите проект в Visual Studio 2008 для демонстрационного поставщика.

  1. Откройте Microsoft Visual Studio 2008.

  2. Выберите меню "Файл", а затем "Создать" и "Проект".

  3. В диалоговом окне "Новый проект":

    • Выберите Visual C# в качестве типа проекта.
    • Выберите библиотеку классов в качестве шаблона.
    • Введите FTPHomeDirectoryDemo в качестве имени проекта.
    • Щелкните OK.
  4. Когда проект откроется, добавьте ссылочный путь к библиотеке расширяемости FTP:

    • Щелкните "Проект" и выберите " Свойства FTPHomeDirectoryDemo".

    • Перейдите на вкладку "Пути ссылки".

    • Введите путь к сборке расширяемости FTP для вашей версии Windows, где C: — это диск операционной системы:

      • Для Windows Server 2008 и Windows Vista: C:\Windows\assembly\GAC\_MSIL\Microsoft.Web.FtpServer\7.5.0.0\_\_31bf3856ad364e35
      • Для Windows 7: C:\Program Files\Reference Assemblies\Microsoft\IIS
    • Щелкните Добавить папку.

  5. Добавьте в проект ключ строгого имени:

    • Щелкните "Проект" и выберите " Свойства FTPHomeDirectoryDemo".
    • Откройте вкладку Подписание .
    • Установите флажок "Подписать сборку" проверка.
    • Выберите <"Создать"> в раскрывающемся списке "Строгое имя ключа".
    • Введите FTPHomeDirectoryDemoKey для имени файла ключа.
    • При необходимости введите пароль для файла ключа; В противном случае снимите флажок "Защитить файл ключа" с помощью поля проверка пароля.
    • Щелкните OK.
  6. Необязательно. Вы можете добавить настраиваемое событие сборки, чтобы автоматически добавить библиотеку DLL в глобальный кэш сборок (GAC) на компьютере разработки:

    • Щелкните "Проект" и выберите " Свойства FTPHomeDirectoryDemo".

    • Перейдите на вкладку "События сборки".

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

      net stop ftpsvc
      call "%VS90COMNTOOLS%\vsvars32.bat">null
      gacutil.exe /if "$(TargetPath)"
      net start ftpsvc
      
  7. Сохраните проект.

Шаг 2. Создание класса расширяемости

На этом шаге вы реализуете интерфейс расширяемости для демонстрационного поставщика.

  1. Добавьте ссылку на библиотеку расширяемости FTP для проекта:

    • Щелкните "Проект" и нажмите кнопку "Добавить ссылку "
    • На вкладке .NET щелкните Microsoft.Web.FtpServer.
    • Щелкните OK.
  2. Добавьте ссылку на System.Web для проекта:

    • Щелкните "Проект" и нажмите кнопку "Добавить ссылку "
    • На вкладке .NET щелкните System.Web.
    • Щелкните OK.
  3. Добавьте код для класса проверки подлинности:

    • В Обозреватель решений дважды щелкните файл Class1.cs.

    • Удалите существующий код.

    • Скопируйте приведенный ниже код и вставьте его в редактор.

      using System;
      using Microsoft.Web.FtpServer;
       
      namespace FtpHomeDirectory
      {
          public class FtpHomeDirDemo : BaseProvider,
              IFtpHomeDirectoryProvider
          {
              string IFtpHomeDirectoryProvider.GetUserHomeDirectoryData(
                  string sessionId,
                  string siteName,
                  string userName)
              {
                  // Note: You would add your own custom logic here.
                  // Return the user's home directory based on their user name.
                  return @"C:\Ftpusers\" + userName;
              }
          }
      }
      
  4. Сохраните и скомпилируйте проект.

Примечание.

Если вы не использовали необязательные шаги для регистрации сборок в GAC, необходимо вручную скопировать сборки на компьютер IIS и добавить сборки в GAC с помощью средства Gacutil.exe. Дополнительные сведения см. в статье Gacutil.exe (средство глобального кэша сборок).

Шаг 3. Добавление поставщика домашнего каталога в FTP

На этом шаге вы добавите демонстрационного поставщика в службу FTP и веб-сайт по умолчанию.

  1. Определите сведения о сборке для поставщика расширяемости:

    • В Windows Обозреватель откройте свой C:\Windows\assembly путь, где C: — это диск операционной системы.
    • Найдите сборку FtpHomeDirectoryDemo .
    • Щелкните правой кнопкой мыши сборку и выберите пункт "Свойства".
    • Скопируйте значение языка и региональных параметров. Например, нейтральный.
    • Скопируйте номер версии, например 1.0.0.0.0.
    • Скопируйте значение маркера открытого ключа , например 426f62526f636b73.
    • Щелкните Отмена.
  2. Добавьте поставщика расширяемости в глобальный список поставщиков FTP:

    • Откройте диспетчер службы IIS (IIS).

    • Щелкните имя компьютера в области Подключение ions.

    • Дважды щелкните проверку подлинности FTP в главном окне.

    • Щелкните "Настраиваемые поставщики" на панели "Действия ".

    • Щелкните Зарегистрировать.

    • Введите ftpHomeDirectoryDemo для имени поставщика.

    • Щелкните управляемый поставщик (.NET).

    • Введите сведения о сборке для поставщика расширяемости, используя скопированные ранее сведения. Например:

      FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
      
    • Щелкните OK.

    • Снимите флажок FtpHomeDirectoryDemo проверка в списке поставщиков.

    • Щелкните OK.

  3. Добавьте настраиваемого поставщика на сайт:

    • На данный момент нет пользовательского интерфейса, который позволяет добавлять пользовательские функции на сайт, поэтому вам потребуется использовать следующую командную строку:

      AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
      
  4. Настройте изоляцию пользователей для использования пользовательского поставщика:

    • На данный момент нет пользовательского интерфейса, который позволяет указать пользовательские функции для изоляции пользователей, поэтому вам потребуется использовать следующую командную строку:

      AppCmd set site "Default Web Site" /ftpServer.userIsolation.mode:Custom
      

Итоги

В этом пошаговом руководстве вы узнали, как:

  • Создайте проект в Visual Studio 2008 для пользовательского поставщика домашнего каталога FTP.
  • Реализуйте интерфейс расширяемости для пользовательских подстановок домашнего каталога FTP.
  • Добавьте в службу FTP настраиваемый поставщик домашнего каталога.

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