IIS FTP 7.5 Extensibilidade (iftPlogProvider e falhas de FTP de registro no log de eventos)
Pergunta
Alguém está familiarizado com a extensibilidade do FTP 7.5 no IIS sabe o que eu poderia estar fazendo de errado?
Estou tendo problemas sérios para que a implementação do iftPlogProvider funcione corretamente para o log de registro personalizado. Tudo o que quero fazer é registrar falhas além de um limiar estático para o registro de eventos e ter coleta de lixo de vez em quando. Tentei trabalhar com um dicionário genérico e o provedor sem sorte, e agora mesmo esse código simples de código que não consigo trabalhar. O provedor nem está criando o log de eventos no código de código abaixo (ou usando -o se eu criar antes). Então agora estou profundamente confuso.
Eu sigo as instruções para registrar a assembléia depois de ser assinada no VS e posso confirmar que ele é adicionado ao GAC. Adicioná -lo ao IIS 7.5 através da opção Register Provedores personalizados também parece estar bem.
Qualquer ajuda com sugestões específicas seria muito apreciada, como mesmo com o excelente conjunto de tutoriais de Robert McMurray, ainda estou tendo esses problemas. Estou executando isso em uma caixa R2 de 2008, a propósito, usando a interface para o código gerenciado.
Stub abaixo:
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);
}
}
Solução
Eu tive os seguintes problemas:
1) Eu tinha um nome de classe incorreto no meu registro desta assembléia no IIS:
FtPLOGGING.FTPLOGDEMO, FTPLOGGINGDEMO, versão = 1.0.0.0, cultura = neutro, publicKeyToken =
2) Eu não de perto Siga o conselho de Robert ao registrar a Assembléia. Deixei a caixa de seleção verificada, e isso a manteve como um provedor de autenticação, que esse exemplo de código não é. Em vez disso, deixei a autenticação básica habilitada, a autenticação anônima desativada (no meu caso) e sem controle A caixa mencionada no tutorial - 'Limpe a caixa de seleção FTPLOGGINGDEMO na lista de provedores.'
3) Eu não estava usando o APPCMD (ou modificando a seção apropriada no ApplicationHost.config diretamente) para atualizar a seção de provedores personalizados no applicationhost.config
<customFeatures>
<providers>
<add name="FtpLoggingDemo" enabled="true" />
</providers>
</customFeatures>
Fazer essas três coisas corrigiu o problema.