다음을 통해 공유


임시 구독 등록

일시적 구독은 이미 존재하는 특정 구독자 개체에 대한 이벤트를 요청합니다. 일시적인 구독은 COM+ 카탈로그에 저장되지만 이벤트 시스템 또는 운영 체제가 중지되면 구독이 삭제됩니다. 영구 구독과 달리 임시 구독은 특정 개체에 연결되며 이벤트 시스템에만 저장됩니다. 이벤트 시스템 또는 운영 체제에 문제가 있으면 구독이 사라집니다. 일시적 구독은 영구 구독보다 더 효율적일 수 있지만 개체 수명 주기를 관리해야 합니다.

구성 요소 서비스 관리 도구를 사용하여 임시 구독을 설정할 수 없습니다. 임시 구독을 만들거나 업데이트하려면 COM+ 관리 인터페이스를 사용해야 합니다.

Visual Basic

다음 절차에서는 Microsoft Visual Basic 사용하여 임시 구독을 만드는 방법을 설명합니다.

  1. TransientSubscriptions 컬렉션에 새 항목을 추가하고 SubscriberInterface 속성을 구독자 개체의 IUnknown 인터페이스로 설정하여 구독을 임시로 지정합니다. COM+ 이벤트는 이벤트를 실행할 때 구독자 개체의 새 인스턴스를 만들지 않고 지정한 인스턴스를 대신 사용합니다. COM+ 이벤트는 구독이 시스템에서 제거될 때까지 구독자 개체에 대한 참조 수를 보유합니다.

  2. 구독하려는 인터페이스 또는 메서드를 구현하는 개체를 사용하여 COM+ 서버 애플리케이션(.exe, .dll 또는 .ocx 파일)을 만듭니다.

  3. 이벤트 클래스 개체의 CLSID 및 구독자 개체의 인스턴스를 전달하여 다음 코드를 사용하여 임시 구독을 만듭니다. 구성 요소 서비스 관리 도구를 사용하여 COM+ 구성 요소를 마우스 오른쪽 단추로 클릭하고 속성을 선택하고 일반 탭을 선택하여 EventCLSID 속성을 가져올 수 있습니다.

    Public Function CreateTransientSubscription( _
      ByVal clsid As String, ByVal objref As Object) As String 
        Dim oCOMAdminCatalog As COMAdmin.COMAdminCatalog
        Dim oTSCol As COMAdminCatalogCollection
        Dim oSubscription As ICatalogObject
        Dim objvar As Variant
        On Error GoTo CreateTransientSubscriptionError
        Set oCOMAdminCatalog = CreateObject("COMAdmin.COMAdminCatalog")
        'Gets the TransientSubscriptions collection
        Set oTSCol = oCOMAdminCatalog.GetCollection( _
          "TransientSubscriptions")
        Set oSubscription = oTSCol.Add
        Set objvar = objref
        oSubscription.Value("SubscriberInterface") = objref
        oSubscription.Value("EventCLSID") = clsid
        oSubscription.Value("Name") = "TransientSubscription"
        oTSCol.SaveChanges
        CreateTransientSubscription = oSubscription.Value("ID")
        Set oSubscription = Nothing
        Set oTSCol = Nothing
        Set oCOMAdminCatalog = Nothing
        Set objvar = Nothing
        Exit Function
    CreateTransientSubscriptionError:
        CreateTransientSubscription = ""
        Err.Raise Err.Number, "[CreateTransientSubscription]" & _
          Err.Source, Err.Description
    End Function
    

다음 예제에서는 CreateTransientSubscription 함수를 호출하여 UpdateStock이라는 메서드가 있는 IStockTicker라는 인터페이스를 구독하는 방법을 보여 줍니다.

  1. 하나의 메서드인 UpdateStock이 있는 IStockTicker 인터페이스를 지원하는 이벤트 클래스를 만듭니다.

  2. 구독자 프로젝트에서 IStockTicker 인터페이스를 구현하는 클래스를 추가합니다.

  3. 구독하려는 경우 다음 코드를 실행합니다.

    Dim oMyTicker As Object
    Dim sSubscriptionID As String
    Set oMyTicker = CreateObject("TheProject.CMyTicker")
    sSubscriptionID = CreateTransientSubscription( _
      "{..CLSID for the Event Class..}", oMyTicker)
    

CreateTransientSubscription 함수는 나중에 구독을 해지하기 위해 핸들 또는 쿠키로 사용할 수 있는 GUID인 문자열을 반환합니다. 구독을 제거하려면 TransientSubscriptions 컬렉션에서 COMAdminCatalogCollectionRemove 메서드를 호출하여 이전에 받은 GUID를 사용하여 구독에 해당하는 인덱스를 전달합니다.

구독 등록