Расширяемость IIS FTP 7.5 (IFtpLogProvider и занесение сбоев FTP в журнал событий)

StackOverflow https://stackoverflow.com/questions/2032198

  •  19-09-2019
  •  | 
  •  

Вопрос

Кто-нибудь, хорошо знакомый с расширяемостью 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>

Выполнение этих трех действий устранило проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top