Создание фильтра издателя
Существует два метода установки фильтра издателя: использование свойства MultiPublisherFilterCLSID класса событий или использования IEventControl::SetPublisherFilterFilter.
- Так как он позволяет создавать объект события с помощью службы компонентов COM+ в очереди, предпочтительный метод — использовать свойство MultiPublisherFilterCLSID в классе событий для задания фильтра издателя. При этом устанавливается один объект фильтра для всех методов интерфейсов событий для объекта события. Объект события активирует фильтр издателя при создании экземпляра объекта класса событий с помощью CoCreateInstance.
- Можно также использовать SetPublisherFilter. Однако если выбрать этот метод, интерфейс не является очередным и поэтому не может использовать объект события со службой компонентов COM+ очередей между издателем и объектом класса событий. Дополнительные сведения об использовании службы компонентов очереди с событиями COM+ см. в разделе "Использование событий COM+" с компонентами COM+Queued.
Событие может иметь один или несколько объектов фильтра или нет вообще. Объекты фильтра издателя должны поддерживать IPublisherFilter или IMultiInterfacePublisherFilter, в зависимости от того, имеется ли один интерфейс запуска или несколько интерфейсов для объекта класса событий. Интерфейсы IPublisherFilter и IMultiInterfacePublisherFilter указывают метод Initialize. Метод Initialize вызывается объектом класса событий сразу после создания объекта фильтра.
События COM+ пытаются вызвать два метода фильтра. Сначала он вызывает IPublisherFilter::P repareToFire и передает указатель интерфейса IFiringControl в фильтр. Затем он запрашивает объект фильтра для интерфейса события. Если фильтр поддерживает интерфейс событий, он вызывает метод в нем. Это обеспечивает доступ к параметрам издателя для события. Фильтр может использовать эти параметры, чтобы определить, какие подписки следует запускать.
См. также