Бөлісу құралы:


Регистрация временной подписки

Временные подписки запрашивают событие для определенного объекта подписчика, который уже существует. Временные подписки хранятся в каталоге COM+, но подписка удаляется, если система событий или операционная система остановлена. В отличие от постоянных подписок, временные подписки привязаны к конкретному объекту и хранятся только в системе событий. Если возникла проблема с системой событий или операционной системой, подписка исчезнет. Временные подписки могут быть более эффективными, чем постоянные подписки, но необходимо управлять жизненными циклами объектов.

Временные подписки нельзя задать с помощью средства администрирования служб компонентов. Для создания или обновления временной подписки необходимо использовать административные интерфейсы COM+.

Visual Basic

В следующей процедуре описывается создание временной подписки с помощью Microsoft Visual Basic:

  1. Укажите подписку как временную, добавив новую запись в коллекцию TransientSubscriptions и задав свойство SubscriptionInterface интерфейсу IUnknown объекта подписчика. События COM+ не создают новый экземпляр объекта подписчика при запуске события, а вместо этого использует указанный экземпляр. События COM+ содержат количество ссылок для объекта подписчика, пока подписка не будет удалена из системы.

  2. Создайте серверное приложение COM+ (.exe, .dll или ocx-файл) с объектом, реализующим интерфейсы или методы, на которые вы хотите подписаться.

  3. Создайте временную подписку с помощью следующего кода, передав clSID объекта класса событий и экземпляр объекта подписчика. С помощью средства администрирования служб компонентов можно получить свойство EventCLSID, щелкнув правой кнопкой мыши компонент COM+, выбрав свойства и выбрав вкладку "Общие ".

    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 для подписки на интерфейс с именем IStockTicker, который имеет метод с именем UpdateStock.

  1. Создайте класс событий, поддерживающий интерфейс IStockTicker, имеющий один метод UpdateStock.

  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, который можно использовать в качестве дескриптора или файла cookie для отзыва подписки позже. Чтобы удалить подписку, вызовите метод Remove COM Администратор CatalogCollection в коллекции TransientSubscriptions, передав индекс, соответствующий подписке с идентификатором GUID, полученным ранее.

Регистрация подписки