У меня есть приложение, реализованное как фильтр ISAPI, поведение которого должно меняться в зависимости от того, загружается ли оно ISA или IIS. Во время GetFilterVersion он должен регистрироваться для SF_NOTIFY_SEND_RAW_DATA, если он загружен ISA или SF_NOTIFY_SEND_RESPONSE, если он загружен IIS.Как фильтр ISAPI различает загрузку IIS или ISA?
Информация о сервере, переданном GetFilterVersion, похоже, отсутствует. Есть ли какие-то трюки, которые могут идентифицировать и различать IIS и ISA?
[править]
Приложение должно знать, что сервер загружает его во время инициализации, во время разговора GetFilterVersion. Нет текущего запроса, поэтому попытка получить SERVER_VARIABLE из переменных заголовка не будет работать; на данный момент нет переменных заголовка.
Чтобы разработать, мое приложение устанавливает заголовки ответов, такие как файлы cookie и файлы управления кэшем. При запуске в контексте ISA-сервера для выполнения этой операции необходимо использовать событие SF_NOTIFY_SEND_RAW_DATA, изменяя исходные данные, отправляемые прокси-сервером ISA. Однако в IIS использование этого уведомления связано с серьезным снижением производительности, поэтому приложение должно использовать SF_NOTIFY_SEND_RESPONSE. SF_NOTIFY_SEND_RESPONSE не будет работать с ISA, поскольку это событие не запускается для проксированных ответов, только для ответов, которые исходят из самой ISA, например страниц с ошибками. Наконец, регистрация событий происходит один раз во время GetFilterVersion() и не может быть изменена после загрузки фильтра.
Поэтому при инициализации приложение должно знать, когда оно решает зарегистрироваться для SF_NOTIFY_SEND_RESPONSE или SF_NOTIFY_SEND_RAW_DATA, независимо от того, загружается ли он IIS или ISA.
Спасибо!Это то, что, как я думал, может существовать, но не помнил достаточно оконных api или знал достаточно о IIS/ISA, чтобы найти. – veefu