Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las suscripciones transitorias solicitan un evento para un objeto de suscriptor específico que ya existe. Las suscripciones transitorias se almacenan en el catálogo com+, pero la suscripción se elimina si se detiene el sistema de eventos o el sistema operativo. A diferencia de las suscripciones persistentes, las suscripciones transitorias están vinculadas a un objeto determinado y solo se almacenan en el sistema de eventos. Si hay un problema con el sistema de eventos o el sistema operativo, la suscripción desaparece. Las suscripciones transitorias pueden ser más eficaces que las suscripciones persistentes, pero debe administrar sus ciclos de vida de objetos.
Las suscripciones transitorias no se pueden establecer mediante la herramienta de administración servicios de componentes. Debe usar las interfaces administrativas de COM+ para crear o actualizar una suscripción transitoria.
Visual Basic
En el procedimiento siguiente se describe cómo crear una suscripción transitoria mediante Microsoft Visual Basic:
Especifique una suscripción como transitoria agregando una nueva entrada a la colección TransientSubscriptions y estableciendo la propiedad SubscriberInterface en la interfaz IUnknown del objeto subscriber. Los eventos COM+ no crean una nueva instancia del objeto de suscriptor al desencadenar un evento, sino que en su lugar usa la instancia especificada. Los eventos COM+ contienen un recuento de referencias para el objeto de suscriptor hasta que la suscripción se quita del sistema.
Cree una aplicación de servidor COM+ (un .exe, un .dll o un archivo .ocx) con un objeto que implemente las interfaces o métodos a los que desea suscribirse.
Cree la suscripción transitoria con el código siguiente, pasando el CLSID del objeto de clase de eventos y la instancia del objeto suscriptor. Con la herramienta administrativa Servicios de componentes, puede obtener la propiedad EventCLSID haciendo clic con el botón derecho en el componente COM+, seleccionando Propiedades y seleccionando la pestaña General .
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
En el ejemplo siguiente se muestra cómo llamar a la función CreateTransientSubscription para suscribirse a una interfaz llamada IStockTicker, que tiene un método denominado UpdateStock.
Cree una clase de eventos que admita la interfaz IStockTicker, que tiene un método, UpdateStock.
En el proyecto de suscriptor, agregue una clase que implemente la interfaz IStockTicker.
Si desea suscribirse, ejecute el código siguiente:
Dim oMyTicker As Object Dim sSubscriptionID As String Set oMyTicker = CreateObject("TheProject.CMyTicker") sSubscriptionID = CreateTransientSubscription( _ "{..CLSID for the Event Class..}", oMyTicker)
La función CreateTransientSubscription devuelve una cadena, que es un GUID que se puede usar como identificador o una cookie para revocar la suscripción más adelante. Para quitar la suscripción, llame al método Remove de COMAdminCatalogCollection en la colección TransientSubscriptions , pasando el índice correspondiente a la suscripción con el GUID recibido anteriormente.
Temas relacionados