2010-01-09 4 views
2

Quelqu'un de familier avec l'extensibilité FTP 7.5 dans IIS sait ce que je peux faire mal?IIS FTP 7.5 Extensibilité (IFtpLogProvider et journalisation des échecs FTP dans le journal des événements)

J'ai beaucoup de mal à obtenir une implémentation de IFtpLogProvider pour fonctionner correctement pour la journalisation personnalisée. Tout ce que je veux faire est de journaliser les échecs au-delà d'un seuil statique dans le journal des événements, et avoir la garbage collection de temps en temps. J'ai essayé de travailler avec un dictionnaire générique et le fournisseur sans aucune chance, et maintenant même ce simple morceau de code, je ne peux pas travailler. Le fournisseur ne crée même pas le journal des événements dans le code ci-dessous (ou l'utilise si je le crée au préalable). Alors maintenant, je suis profondément confus.

Je suis les instructions pour enregistrer l'assemblage après qu'il a été signé à partir de VS et je peux confirmer qu'il est ajouté au GAC. L'ajouter à IIS 7.5 via l'option Enregistrer les fournisseurs personnalisés semble également bien.

Toute aide avec des suggestions spécifiques serait grandement appréciée, car même avec l'excellent ensemble de tutoriels par Robert McMurray, j'ai toujours ces problèmes. Je cours ceci sur une boîte 2008 R2, à propos, en utilisant l'interface pour le code managé.

Stub ci-dessous:

using System; 
using System.Collections.Generic; 
using System.Collections.Specialized; 
using System.Configuration.Provider; 
using System.Data; 
using System.Data.SqlClient; 
using System.Diagnostics; 
using System.Diagnostics.Eventing; 
using System.Text; 
using Microsoft.Web.FtpServer; 
using System.IO; 

public class test: BaseProvider, IFtpLogProvider 
{ 

    void IFtpLogProvider.Log(FtpLogEntry loggingParameters) 
    { 
     if (!EventLog.SourceExists("TEST")) 
     { 
      EventLog.CreateEventSource("TEST", "TEST"); 
     } 

     // Just trying to get anything into this log, like a list of 
     // USER attempts or something 
     EventLog.WriteEntry("TEST", loggingParameters.Command); 

    } 

    // Mark an IP address for banning. 
    private void BanAddress(string ipAddress) 
    { 
     EventLog.WriteEntry("TEST", ipAddress, EventLogEntryType.Warning, 9010); 
    } 
} 

Répondre

2

J'ai eu les questions suivantes:

1) J'ai eu un nom de classe incorrect dans mon enregistrement de cet ensemble dans IIS:

FtpLogging. FtpLogDemo, FtpLoggingDemo, version = 1.0.0.0, Culture = neutre, PublicKeyToken =

2) Je n'ai pas étroitement suivre les conseils de Robert lors de l'enregistrement de l'ensemble. J'ai laissé la case cochée, et cela l'a gardé comme fournisseur d'authentification, ce que cet exemple de code n'est pas. Au lieu de cela, j'ai laissé l'autorisation de base activée, l'authentification anonyme désactivée (dans mon cas), et décochée la case mentionnée dans le tutoriel - 'Effacer la case à cocher FtpLoggingDemo dans la liste des fournisseurs.'

3) Je n'utilisais pas APPCMD (ou modifier la section appropriée dans applicationHost.config directement) mettre à jour la section des fournisseurs personnalisés dans applicationHost.config

<customFeatures> 
    <providers> 
     <add name="FtpLoggingDemo" enabled="true" /> 
    </providers> 
</customFeatures> 

Faire ces trois choses résolu le problème.

+1

N'oubliez pas d'installer cette mise à jour: http://support.microsoft.com/kb/2550766/ sinon le RemoteIpAddress renverra votre adresse IP locale. – MemphiZ

+0

astéroïde - Merci beaucoup. Vous avez vraiment éclairci quelques choses pour moi. Je voudrais pouvoir vous upvote 100. – raddevus