マネージ コード (C#) を使用して単純な FTP ログ プロバイダーを作成する方法

公開日: 2009 年 3 月 18 日 (作業者: iisteam (英語))

更新日: 2009 年 9 月 11 日 (作業者: iisteam (英語))

マイクロソフトでは、Windows Server® 2008 用に完全に書き換えた新しい FTP サービスを作成しました。この新しい FTP サービスでは多くの新機能が追加され、Web サイト作成者は簡単にコンテンツを発行でき、Web 管理者は多くのセキュリティ オプションと展開オプションを使用できます。

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

このチュートリアルでは、マネージ コードを使用して単純な FTP ログ プロバイダーを作成するステップを説明します。

必要条件

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

  1. Windows Server 2008 サーバーに IIS 7 がインストールされている必要があります。また、インターネット インフォメーション サービス (IIS) マネージャーもインストールされている必要があります。
  2. 新しい FTP 7.5 サービスがインストールされている必要があります。FTP 7.5 サービスは、Web サイト (https://www.iis.net/(英語)) からダウンロードしてインストールできます。次のいずれかのリンクを使用してください。
  3. FTP 発行用のルート フォルダーを作成する必要があります。
  4. Visual Studio 2008 を使用する必要があります。(メモ: Visual Studio の旧バージョンを使用すると、このチュートリアルのステップの一部が不正確になる可能性があります)。
  5. ログ用のフォルダーを作成する必要があります。このコード サンプルでは C:\logfiles\myftpsite を使用していますが、必要に応じて変更できます。

ステップ 1: プロジェクト環境のセットアップ

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

  1. Microsoft Visual Studio 2008 を開きます。
  2. [ファイル] メニューの [新規作成] をクリックし、[プロジェクト] をクリックします。
  3. [新しいプロジェクト] ダイアログ ボックスで以下の操作を行います。
    • プロジェクトの種類として [Visual C#] を選択します。
    • テンプレートとして [クラス ライブラリ] を選択します。
    • プロジェクト名として「FtpLoggingDemo」と入力します。
    • [OK] をクリックします。
  4. プロジェクトが開いたら、以下の操作を行って FTP 拡張機能ライブラリへの参照パスを追加します。
    • [プロジェクト] メニューの [FtpLoggingDemo のプロパティ] をクリックします。
    • [参照パス] タブをクリックします。
    • お使いの 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. 厳密な名前のキーをプロジェクトに追加します。
    • [プロジェクト] メニューの [FtpLoggingDemo のプロパティ] をクリックします。
    • [署名] タブをクリックします。
    • [アセンブリの署名] チェック ボックスをオンにします。
    • 厳密なキー名を選択するドロップダウン ボックスから [<新規作成>] を選択します。
    • キー ファイルの名前として「FtpLoggingDemoKey」と入力します。
    • 必要な場合、キー ファイル用のパスワードを入力します。不要な場合は、[キー ファイルをパスワードで保護する] チェック ボックスをオフにします。
    • [OK] をクリックします。
  6. オプション: カスタム ビルド イベントを追加して、開発用コンピューター上のグローバル アセンブリ キャッシュ (GAC) に DLL を自動的に追加できます。
    • [プロジェクト] メニューの [FtpLoggingDemo のプロパティ] をクリックします。

    • [ビルド イベント] タブをクリックします。

    • [ビルド後に実行するコマンド ライン] ダイアログ ボックスに、次を入力します。

      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 System.IO;
      using Microsoft.Web.FtpServer;
      namespace FtpLogging
      {
      public class FtpLogDemo : BaseProvider,
      IFtpLogProvider
      {
      void IFtpLogProvider.Log(FtpLogEntry loggingParameters)
      {
      // メモ: 独自のカスタム ロジックをここに追加できます。
      // 出力用のログ ファイルを開きます。
      using (StreamWriter sw =
      new StreamWriter(@"C:\logfiles\myftpsite\myftplog.log",true))
      {
      // このログ エントリのために現在の日時を取得します。
      DateTime dt = DateTime.Now;
      // ユーザー名を取得します。
      string un = loggingParameters.UserName;
      // ログ エントリをログ ファイルに書き込みます。
      sw.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
      dt.ToShortDateString(),
      dt.ToLongTimeString(),
      loggingParameters.RemoteIPAddress,
      (un.Length == 0) ? "-" : un,
      loggingParameters.Command,
      loggingParameters.SessionId);
      }
      }
      }
      }
      
  4. プロジェクトを保存してビルドします。

メモ: GAC にアセンブリを登録するオプションのステップを使用しなかった場合は、アセンブリを IIS 7 コンピューターに手動でコピーし、Gacutil.exe ツールを使用して GAC にアセンブリを追加する必要があります。詳細については、マイクロソフトの MSDN Web サイトの次のトピックを参照してください。

グローバル アセンブリ キャッシュ ツール (Gacutil.exe)

ステップ 3: FTP へのログ プロバイダーの追加

このステップでは、デモ プロバイダーを FTP サービスおよび既定の Web サイトに追加します。

  1. 拡張機能プロバイダー用のアセンブリ情報を判断します。
    • Windows Explorer で、パス C:\Windows\assembly を開きます。ここで、C: はオペレーティング システム ドライブです。
    • FtpLoggingDemo アセンブリを探します。
    • アセンブリを右クリックし、[プロパティ] をクリックします。
    • [カルチャ] の値 ([Neutral] など) をコピーします。
    • [バージョン] 番号 ([1.0.0.0] など) をコピーします。
    • [公開キー トークン] の値 ([426f62526f636b73] など) をコピーします。
    • [キャンセル] をクリックします。
  2. FTP プロバイダーのグローバル リストに拡張機能プロバイダーを追加します。
    • インターネット インフォメーション サービス (IIS) マネージャーを開きます。
    • [接続] ウィンドウで、コンピューターの名前をクリックします。
    • メイン ウィンドウで [FTP 認証] をダブルクリックします。
    • [操作] ウィンドウで、[カスタム プロバイダー] をクリックします。
    • [登録] をクリックします。
    • プロバイダーの [名前] に「FtpLoggingDemo」と入力します。
    • [マネージ プロバイダー (.NET)] をクリックします。
    • 前にコピーした情報を使用して、拡張機能プロバイダーのアセンブリ情報を入力します。たとえば、次のようになります。
      FtpLogging.FtpLogDemo,FtpLoggingDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
    • [OK] をクリックします。
    • プロバイダーの一覧の [FtpLoggingDemo] チェック ボックスをオフにします。
    • [OK] をクリックします。
  3. サイトにカスタム プロバイダーを追加します。
    • この時点では、サイトにカスタム機能を追加するための UI がないので、次のコマンド ラインを使用する必要があります。

      AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpLoggingDemo',enabled='true'] /commit:apphost
      

まとめ

このチュートリアルでは、次について学びました。

  • カスタム FTP ログ プロバイダー用に Visual Studio 2008 でプロジェクトを作成する方法
  • カスタム FTP ログ用の拡張機能インターフェイスの実装方法
  • FTP サービスへのカスタム認証プロバイダーの追加方法

ユーザーが FTP サイトに接続したときに、FTP サービスはデモ プロバイダーに指定されているパスにログ ファイルを作成します。

関連コンテンツ

記事