2016-04-25 13 views
0

SQL Serverテーブルから認証するように設計されたカスタムIIS FTP認証プロバイダを構築しています。テーブルにはユーザー名、パスワード、ホームディレクトリがあり、これらはクエリから返されます。これらはすべてオーセンティケータでうまくいくようですが、ホームディレクトリプロバイダを実装しようとすると、私が指定したフォルダに入ることはありません。プロバイダが実際に呼び出されていないようです。同様に、アップロードされたファイルのカスタム処理を提供するためにポストプロセスを実装しようとすると、それは起動しません。私はすべてを正しく登録したか、認証方法が動かないと思ったので、私は困惑しています - なぜ他の2つは実行されていませんか?IIS FTP 8ホームディレクトリプロバイダが起動しない

テキストファイルに書き込んでいるので、メソッドが起動しているかどうかを判断できるようにコードを縮小しました。認証は機能し、他の認証は機能しません。

using System; 
using System.IO; 
using Microsoft.Web.FtpServer; 

namespace MyCustomFtpExtension 
{ 
    public class DatabaseAuthenticator : BaseProvider, 
     IFtpAuthenticationProvider, 
     IFtpRoleProvider, IFtpHomeDirectoryProvider, IFtpPostprocessProvider, 
     IFtpLogProvider 
    { 
     private readonly string _logfile = Path.Combine(@"c:\test", "logs", "FtpExtension.log"); 
     public bool AuthenticateUser(string sessionId, string siteName, string userName, string userPassword, 
      out string canonicalUserName) 
     { 
      canonicalUserName = userName; 

      var result = DatabaseHelper.Authenticate(userName, userPassword); 
      if (result) 
      { 
       LogMessage("Login Success: " + userName); //this message appears 
      } 
      else 
      { 
       LogMessage("Login Failure: " + userName); 
      } 
      return result; 
     } 

     string IFtpHomeDirectoryProvider.GetUserHomeDirectoryData(
      string sessionId, 
      string siteName, 
      string userName) 
     { 
      LogMessage("In ftp home directory"); //this message never appears 

      return @"c:\temp\test"; 
     } 

     public FtpProcessStatus HandlePostprocess(FtpPostprocessParameters postProcessParameters) 
     { 

      LogMessage("Running Post Process"); //this message never appears 
      return FtpProcessStatus.FtpProcessContinue; 
     } 

     public bool IsUserInRole(string sessionId, string siteName, string userName, string userRole) 
     { 
      return true; // I don't care about this - if they authenticate, that's all I need. 
     } 


     //to keep the sample short I took out the log provider - it was copy/paste from Microsoft's example 

     //this is a quick and dirty output so I can see what's going on (which isn't much) 
     private void LogMessage(string logEntry) 
     { 
      using (var sw = new StreamWriter(_logfile, true)) 
      { 
       // Retrieve the current date and time for the log entry. 
       var dt = DateTime.Now; 

       sw.WriteLine("{0}\t{1}\tMESSAGE:{2}", 
        dt.ToShortDateString(), 
        dt.ToLongTimeString(), 
        logEntry); 
       sw.Flush(); 
      } 
     } 
    } 
} 

答えて

0

IISマネージャで[FTP Authorization Rules]で設定していなかった設定が見つかりました。カスタム設定を示すために設定を変更しなければなりませんでした。私がそれをしたら、すべてのメソッドが起動し、テキストファイルにすべてのメッセージが表示され、別のエラーが発生しました。だから研究に戻る私は行く。しかしそれが彼らが発射していない理由です。

関連する問題