创建发布服务器筛选器

有两种方法可用于建立发布服务器筛选器:使用事件类的 MultiPublisherFilterCLSID 属性,或使用 IEventControl::SetPublisherFilter

  • 因为它允许使用 COM+ 排队组件服务组合事件对象,因此首选方法是使用事件类中的 MultiPublisherFilterCLSID 属性来设置发布服务器筛选器。 这将为事件对象的所有事件接口方法建立一个筛选器对象。 当事件类对象使用 CoCreateInstance 进行实例化时,事件对象将激活发布服务器筛选器。
  • 还可以使用 SetPublisherFilter。 但是,如果选择此方法,则接口不可排队,因此不能在发布服务器和事件类对象之间,将将事件对象与 COM+ 排队组件服务结合使用。 有关将排队组件服务与 COM+ 事件配合使用的其他信息,请参阅将 COM+ 事件与 COM+ 排队组件配合使用

事件可以有一个或多个筛选器对象,或者完全没有筛选器对象。 发布服务器筛选器对象必须支持 IPublisherFilterIMultiInterfacePublisherFilter,具体取决于事件类对象上是有单个触发接口还是多个触发接口。 IPublisherFilterIMultiInterfacePublisherFilter 接口都指定 Initialize 方法。 创建筛选器对象后,事件类对象将立即调用 Initialize 方法。

COM+ 事件会尝试在筛选器上调用两种方法。 首先,它调用 IPublisherFilter::PrepareToFire,并将 IFiringControl 接口指针传递给筛选器。 然后,它会查询事件接口的筛选器对象。 如果筛选器支持事件接口,则会调用该接口上的方法。 这为事件提供发布服务器参数的访问权限。 筛选器可以使用这些参数来确定要触发的订阅。

筛选 COM+ 中的事件