다음을 통해 공유


게시자 필터 만들기

게시자 필터를 설정하는 방법에는 이벤트 클래스의 MultiPublisherFilterCLSID 속성을 사용하거나 IEventControl::SetPublisherFilter를 사용하는 두 가지 메서드가 있습니다.

  • COM+ 큐에 대기 중인 구성 요소 서비스를 사용하여 이벤트 개체를 작성할 수 있으므로 기본 방법은 이벤트 클래스에서 MultiPublisherFilterCLSID 속성을 사용하여 게시자 필터를 설정하는 것입니다. 이렇게 하면 이벤트 개체에 대한 이벤트 인터페이스의 모든 메서드에 대해 하나의 필터 개체가 설정됩니다. 이벤트 개체는 CoCreateInstance를 사용하여 이벤트 클래스 개체를 인스턴스화할 때 게시자 필터를 활성화합니다.
  • SetPublisherFilter를 사용할 수도 있습니다. 그러나 이 메서드를 선택하는 경우 인터페이스는 큐에 대기할 수 없으므로 게시자와 이벤트 클래스 개체 간의 COM+ 큐에 대기된 구성 요소 서비스와 함께 이벤트 개체를 사용할 수 없습니다. COM+ 이벤트와 함께 큐에 대기된 구성 요소 서비스를 사용하는 방법에 대한 자세한 내용은 COM+ 큐에 대기된 구성 요소에서 COM+ 이벤트 사용을 참조하세요.

이벤트에는 하나 이상의 필터 개체가 있거나 전혀 없을 수 있습니다. 게시자 필터 개체는 이벤트 클래스 개체에 단일 발생 인터페이스 또는 여러 실행 인터페이스가 있는지 여부에 따라 IPublisherFilter 또는 IMultiInterfacePublisherFilter를 지원해야 합니다. IPublisherFilterIMultiInterfacePublisherFilter 인터페이스는 모두 Initialize 메서드를 지정합니다. Initialize 메서드는 필터 개체를 만든 직후 이벤트 클래스 개체에 의해 호출됩니다.

COM+ 이벤트는 필터에서 두 메서드를 호출하려고 시도합니다. 먼저 IPublisherFilter::P repareToFire 를 호출하고 IFiringControl 인터페이스 포인터를 필터에 전달합니다. 그런 다음 이벤트 인터페이스에 대한 필터 개체를 쿼리합니다. 필터가 이벤트 인터페이스를 지원하는 경우 이벤트 인터페이스에서 메서드를 호출합니다. 이렇게 하면 이벤트에 대한 게시자 매개 변수에 액세스할 수 있습니다. 필터는 이러한 매개 변수를 사용하여 실행할 구독을 결정할 수 있습니다.

COM+에서 이벤트 필터링