Расширяемость IIS FTP 7.5 (IFtpLogProvider и занесение сбоев FTP в журнал событий)
Вопрос
Кто-нибудь, хорошо знакомый с расширяемостью FTP 7.5 в IIS, знает, что я, возможно, делаю неправильно?
У меня возникли серьезные проблемы с тем, чтобы заставить реализацию IFtpLogProvider корректно работать для пользовательского ведения журнала.Все, что я хочу сделать, это регистрировать сбои, превышающие статический порог, в журнале событий и время от времени выполнять сборку мусора.Я пробовал работать с универсальным словарем и провайдером, но безуспешно, и теперь даже этот простой фрагмент кода я не могу заставить работать.Поставщик даже не создает журнал событий в приведенной ниже заглушке кода (или не использует его, если я создаю его заранее).Так что теперь я в глубоком замешательстве.
Я следую инструкциям по регистрации сборки после того, как она подписана изнутри VS, и я могу подтвердить, что она добавлена в GAC.Добавление его в IIS 7.5 с помощью опции Register Custom Providers, похоже, тоже неплохо.
Буду очень признателен за любую помощь с конкретными предложениями, так как даже с отличным набором руководств Роберта Макмюррея у меня все еще возникают эти проблемы.Кстати, я запускаю это на компьютере 2008 R2, используя интерфейс для управляемого кода.
Заглушка внизу:
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);
}
}
Решение
У меня возникли следующие проблемы:
1) У меня было неправильное имя класса при регистрации этой сборки в IIS:
FtpLogging.FtpLogGemo,FtpLoggingDemo, версия=1.0.0.0, Культура=нейтральная,PublicKeyToken=
2) Я этого не делал внимательно следуйте советам Роберта при регистрации собрания.Я оставил флажок установленным, и это сохранило его в качестве поставщика аутентификации, которым этот пример кода не является.Вместо этого я оставил включенной базовую аутентификацию, отключил анонимную аутентификацию (в моем случае) и непроверенный поле, упомянутое в руководстве - "Снимите флажок FtpLoggingDemo в списке поставщиков".
3) Я не использовал AppCmd (или не изменял соответствующий раздел в applicationHost.config напрямую) для обновления раздела пользовательских поставщиков в applicationHost.config
<customFeatures>
<providers>
<add name="FtpLoggingDemo" enabled="true" />
</providers>
</customFeatures>
Выполнение этих трех действий устранило проблему.