Cómo: Enviar mensajes en transacciones internas

Actualización: noviembre 2007

Las transacciones internas implican únicamente a recursos de Message Queue Server y se administran exclusivamente desde Message Queue Server mediante MessageQueueTransaction. Para controlar el proceso de transacción, se crea una instancia de MessageQueueTransaction y se transfiere al mensaje elegido para enviarla como una transacción.

Los métodos siguientes controlan el proceso transaccional:

Método

Utilizado para

Begin

Indica el inicio de una transacción, que tiene uno o varios mensajes y operaciones.

Commit

Confirmar la transacción si todas las operaciones de mensajes que contiene se realizaron correctamente.

Abort

Deshacer una transacción durante la comprobación de errores.

Nota:

Una cola desconectada o llena no se considera un error.

En la mayoría de los casos, el código transaccional debería agregarse en una instrucción Instrucción Try...Catch...Finally (Visual Basic) (o try-catch-finally (Referencia de C#)). Esto permite especificar la transacción en la sección Try de la instrucción y, a continuación, utilizar la instrucción Catch para ejecutar el método Abort si se producen errores. Vea el código siguiente para obtener un ejemplo de este modelo.

Para enviar mensajes dentro de una transacción interna

  1. Cree una instancia del componente MessageQueue y establezca su propiedad Path en la cola a la que se desea hacer referencia. Para obtener más información, vea Cómo: Crear instancias de componentes MessageQueue.

  2. Cree una instancia de la clase MessageQueueTransaction para controlar la transacción.

  3. Llame al método Begin de la clase MessageQueueTransaction.

  4. Defina cada mensaje que desea enviar después de llamar a Begin. Para obtener más información, vea Cómo: Crear instancias de componentes MessageQueue.

  5. Una vez enviado el último mensaje, llame al método Commit de la instancia de MessageQueueTransaction para cerrar la transacción.

  6. Agregue todo el trabajo de la transacción en el código de comprobación de errores Try...Catch para controlar los errores que puedan surgir.

  7. Si detecta un error, deshaga la transacción llamando al método Abort.

    El código podría tener el siguiente aspecto:

    Dim transaction As New System.Messaging.MessageQueueTransaction
    transaction.Begin()
    Try
        MessageQueue1.Send("Message1", "Label1", transaction)
        MessageQueue1.Send("Message2", "Label2", transaction)
        MessageQueue1.Send("Message3", "Label3", transaction)
        transaction.Commit()
    Catch
        transaction.Abort()
    End Try
    
         System.Messaging.MessageQueueTransaction transaction =
                new System.Messaging.MessageQueueTransaction();
            transaction.Begin();
            try
            {
                messageQueue1.Send("Message1", "Label1", transaction);
                messageQueue1.Send("Message2", "Label2", transaction);
                messageQueue1.Send("Message3", "Label3", transaction);
                transaction.Commit();
            }
            catch
            {
                transaction.Abort();
            }
    

Vea también

Tareas

Cómo: Crear colas transaccionales

Cómo: Crear instancias de componentes MessageQueue

Conceptos

Procesamiento transaccional de mensajes

Otros recursos

Enviar y serializar mensajes