マネージド コード (C#) を使用して単純な FTP ホーム ディレクトリ プロバイダーを作成する方法

作成者: Robert McMurray

Microsoft は、Windows Server® 2008 用に完全に書き換えられた新しい FTP サービスを作成しました。 この新しい FTP サービスには、Web 作成者が以前よりも簡単にコンテンツを公開できる多くの新機能が組み込まれており、Web 管理者により多くのセキュリティとデプロイのオプションが提供されます。

新しい FTP 7.5 サービスでは、FTP サービスに含まれる組み込み機能を拡張できる拡張性がサポートされています。 具体的には、FTP 7.5 では、独自の認証および承認プロバイダーの作成がサポートされています。 また、カスタム FTP ログや FTP ユーザーのホーム ディレクトリ情報を決定するためのプロバイダーを作成することもできます。

このチュートリアルでは、マネージド コードを使用して単純な FTP ホーム ディレクトリ プロバイダーを作成する手順について説明します。

前提条件

この記事の手順を完了するには、次の項目が必要です。

  1. IIS 7.0 以降を Windows Server 2008 サーバーにインストールし、インターネット インフォメーション サービス (IIS) マネージャーもインストールする必要があります。

  2. 新しい FTP 7.5 サービスをインストールする必要があります。

  3. FTP 公開用のルート フォルダーを作成する必要があります。

  4. Visual Studio 2008 を使用する必要があります。

    Note

    以前のバージョンの Visual Studio を使用している場合、このチュートリアルの一部の手順が正しくない可能性があります。

  5. 各ユーザーのホーム ディレクトリを作成する必要があります。コード サンプルでは C:\Ftpusers\%*UserName*% を使用しますが、必要に応じて変更できます。

手順 1: プロジェクト環境の設定

この手順では、Visual Studio 2008 でデモ プロバイダー用のプロジェクトを作成します。

  1. Microsoft Visual Studio 2008 を起動します。

  2. [ファイル] メニューの [新規作成][プロジェクト] の順に選択します。

  3. 新しいプロジェクト ダイアログ ボックスで以下を実行します。

    • プロジェクトの種類として [Visual C#] を選択します。
    • テンプレートとして [クラス ライブラリ] を選択します。
    • プロジェクトの名前として「FtpHomeDirectoryDemo」と入力します。
    • OK をクリックします。
  4. プロジェクトが開いたら、FTP 機能拡張ライブラリへの参照パスを追加します。

    • [プロジェクト] を選択し、[FtpHomeDirectoryDemo Properties] (FtpHomeDirectoryDemo プロパティ) を選択します。

    • [参照パス] タブをクリックします。

    • Windows のバージョンの FTP 拡張機能アセンブリへのパスを入力します。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 Properties] (FtpHomeDirectoryDemo プロパティ) を選択します。
    • [署名] タブをクリックします。
    • [アセンブリの署名] チェック ボックスをオンにします。
    • 厳密なキー名のドロップダウン ボックスから <[新規作成]> を選択します。
    • キー ファイル名として「FtpHomeDirectoryDemoKey」と入力します。
    • 必要に応じて、キー ファイルのパスワードを入力します。それ以外の場合は、[Protect my key file with a password] (パスワードでキー ファイルを保護する) チェック ボックスをオフにします。
    • OK をクリックします。
  6. 省略可能: カスタム ビルド イベントを追加して、開発用コンピューターのグローバル アセンブリ キャッシュ (GAC) に DLL を自動的に追加できます。

    • [プロジェクト] を選択し、[FtpHomeDirectoryDemo Properties] (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. プロジェクトを保存してコンパイルします。

Note

オプションの手順を使用してアセンブリを GAC に登録しなかった場合は、手動でアセンブリを IIS コンピューターにコピーし、Gacutil.exe ツールを使用してアセンブリを GAC に追加する必要があります。 詳細については、「Gacutil.exe (グローバル アセンブリ キャッシュ ツール)」を参照してください。

手順 3: ホーム ディレクトリ プロバイダーの FTP への追加

この手順では、FTP サービスと既定の Web サイトにデモ プロバイダーを追加します。

  1. 機能拡張プロバイダーのアセンブリ情報を確認します。

    • Windows エクスプローラーで C:\Windows\assembly パスを開きます。C: はオペレーティング システム ドライブです。
    • FtpHomeDirectoryDemo アセンブリを見つけます。
    • アセンブリを右クリックし、[プロパティ] を選択します。
    • カルチャ値 (例: Neutral) をコピーします。
    • バージョン番号 (例: 1.0.0.0) をコピーします。
    • Public Key Token 値 (例: 426f62526f636b73) をコピーします。
    • [キャンセル] をクリックします。
  2. 機能拡張プロバイダーを FTP プロバイダーのグローバル リストに追加します。

    • インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • [接続] ウィンドウでコンピューター名を選択します。

    • メイン ウィンドウで [FTP Authentication] をダブルクリックします。

    • [操作] ウィンドウで [カスタム プロバイダー] を選択します。

    • [登録] をクリックします。

    • プロバイダーの [名前] として「FtpHomeDirectoryDemo」と入力します。

    • [マネージド プロバイダー (.NET)] を選択します。

    • 前にコピーした情報を使用して、拡張プロバイダーのアセンブリ情報を入力します。 次に例を示します。

      FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
      
    • OK をクリックします。

    • プロバイダーの一覧の [FtpHomeDirectoryDemo] チェック ボックスをオフにします。

    • OK をクリックします。

  3. カスタム プロバイダーをサイトに追加します。

    • 現時点では、サイトにカスタム機能を追加できる UI がないため、次のコマンド ラインを使用する必要があります。

      AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
      
  4. カスタム プロバイダーを使用するようにユーザー分離を構成します。

    • 現時点では、ユーザー分離用のカスタム機能を指定できる UI がないため、次のコマンド ラインを使用する必要があります。

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

まとめ

このチュートリアルでは、次の方法を学習しました。

  • カスタム FTP ホーム ディレクトリ プロバイダー用のプロジェクトを Visual Studio 2008 で作成する。
  • カスタム FTP ホーム ディレクトリ参照の機能拡張インターフェイスを実装する。
  • カスタム ホーム ディレクトリ プロバイダーを FTP サービスに追加する。

ユーザーが FTP サイトに接続すると、FTP サービスによって、各ユーザーのホーム ディレクトリがデモ プロバイダーで指定したパスに設定されます。