Partilhar via


MessageQueue.Send Método

Definição

Envia um objeto para uma fila.

Sobrecargas

Send(Object)

Envia um objeto a uma fila não transacional referenciada por essa MessageQueue.

Send(Object, MessageQueueTransaction)

Envia um objeto para a fila transacional referenciada por este MessageQueue.

Send(Object, MessageQueueTransactionType)

Envia um objeto para a fila referenciada por esse MessageQueue.

Send(Object, String)

Envia um objeto para a fila não transacional referenciada por este MessageQueue e especifica um rótulo para a mensagem.

Send(Object, String, MessageQueueTransaction)

Envia um objeto para a fila transacional referenciada por este MessageQueue e especifica um rótulo para a mensagem.

Send(Object, String, MessageQueueTransactionType)

Envia um objeto para a fila referenciada por esse MessageQueue e especifica um rótulo para a mensagem.

Send(Object)

Envia um objeto a uma fila não transacional referenciada por essa MessageQueue.

public:
 void Send(System::Object ^ obj);
public void Send (object obj);
member this.Send : obj -> unit
Public Sub Send (obj As Object)

Parâmetros

obj
Object

O objeto a ser enviado à fila.

Exceções

A propriedade Path não foi definida.

- ou -

Erro ao acessar um método do serviço de Enfileiramento de Mensagens.

Exemplos

O exemplo de código a seguir se conecta a uma fila de mensagens e envia uma mensagem para a fila.

#using <system.dll>
#using <system.messaging.dll.>

using namespace System;
using namespace System::Messaging;
ref class MyNewQueue
{
public:
   void SendMessage()
   {
      
      // Connect to a queue on the local computer.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
      
      // Send a message to the queue.
      if ( myQueue->Transactional == true )
      {
         
         // Create a transaction.
         MessageQueueTransaction^ myTransaction = gcnew MessageQueueTransaction;
         
         // Begin the transaction.
         myTransaction->Begin();
         
         // Send the message.
         myQueue->Send( "My Message Data.", myTransaction );
         
         // Commit the transaction.
         myTransaction->Commit();
      }
      else
      {
         myQueue->Send( "My Message Data." );
      }

      return;
   }

};

int main()
{
   
   // Create a new instance of the class.
   MyNewQueue^ myNewQueue = gcnew MyNewQueue;
   
   // Send a message to a queue.
   myNewQueue->SendMessage();
   return 0;
}
using System;
using System.Messaging;

namespace MyProject
{

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //
        // This example sends a message to a queue.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Send a message to a queue.
            myNewQueue.SendMessage();

            return;
        }

        //**************************************************
        // Sends a message to a queue.
        //**************************************************
        
        public void SendMessage()
        {
                        
            // Connect to a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            // Send a message to the queue.
            if (myQueue.Transactional == true)
            {
                // Create a transaction.
                MessageQueueTransaction myTransaction = new
                    MessageQueueTransaction();

                // Begin the transaction.
                myTransaction.Begin();

                // Send the message.
                myQueue.Send("My Message Data.", myTransaction);

                // Commit the transaction.
                myTransaction.Commit();
            }
            else
            {
                myQueue.Send("My Message Data.");
            }

            return;
        }
    }
}
Imports System.Messaging

Public Class MyNewQueue


        '
        ' Provides an entry point into the application.
        ' 
        ' This example sends a message to a queue.
        '

        Public Shared Sub Main()

            ' Create a new instance of the class.
            Dim myNewQueue As New MyNewQueue

            ' Send a message to a queue.
            myNewQueue.SendMessage()

            Return

        End Sub


        '
        ' Sends a message to a queue.
        '

        Public Sub SendMessage()

            ' Connect to a queue on the local computer.
            Dim myQueue As New MessageQueue(".\myQueue")

            ' Send a message to the queue.
            If myQueue.Transactional = True Then

                ' Create a transaction.
                Dim myTransaction As New MessageQueueTransaction

                ' Begin the transaction.
                myTransaction.Begin()

                ' Send the message.
                myQueue.Send("My Message Data.", myTransaction)

                ' Commit the transaction.
                myTransaction.Commit()

            Else
                myQueue.Send("My Message Data.")
            End If

            Return

        End Sub

End Class

O exemplo de código a seguir envia uma classe definida pelo Order aplicativo para uma fila e, em seguida, recebe uma mensagem dessa fila.

Comentários

Use essa sobrecarga para enviar uma mensagem que contém o obj parâmetro para a fila referenciada pelo MessageQueue. O objeto que você envia para a fila pode ser um Message ou qualquer objeto gerenciado. Se você enviar qualquer objeto diferente de um Message, o objeto será serializado e inserido no corpo da mensagem.

Se você usar essa sobrecarga para enviar uma mensagem para uma fila transacional, a mensagem será enviada para a fila de mensagens mortas. Se você quiser que a mensagem faça parte de uma transação que contenha outras mensagens, use uma sobrecarga que usa um MessageQueueTransaction ou MessageQueueTransactionType como parâmetro.

Se você não definir a Formatter propriedade antes de chamar Send(Object), o formatador usará como padrão o XmlMessageFormatter.

A DefaultPropertiesToSend propriedade se aplica a qualquer objeto diferente de um Message. Se você especificar, por exemplo, um rótulo ou uma prioridade usando o DefaultPropertiesToSend membro , esses valores se aplicarão a qualquer mensagem que contenha um objeto que não seja do tipo Message quando seu aplicativo o enviar para a fila. Ao enviar um Message, os valores de propriedade definidos para o Message têm precedência sobre DefaultPropertiesToSend e a propriedade da Message.Formatter mensagem tem precedência sobre a propriedade da MessageQueue.Formatter fila.

A tabela a seguir mostra se esse método está disponível em vários modos de Grupo de Trabalho.

Modo de grupo de trabalho Disponível
Computador local Yes
Nome do computador local e do formato direto Yes
Computador remoto Não
Computador remoto e nome de formato direto Yes

Confira também

Aplica-se a

Send(Object, MessageQueueTransaction)

Envia um objeto para a fila transacional referenciada por este MessageQueue.

public:
 void Send(System::Object ^ obj, System::Messaging::MessageQueueTransaction ^ transaction);
public void Send (object obj, System.Messaging.MessageQueueTransaction transaction);
member this.Send : obj * System.Messaging.MessageQueueTransaction -> unit
Public Sub Send (obj As Object, transaction As MessageQueueTransaction)

Parâmetros

obj
Object

O objeto a ser enviado à fila.

Exceções

O parâmetro transaction é null.

A propriedade Path não foi definida.

- ou -

O aplicativo do serviço de enfileiramento de mensagens indicou um uso incorreto de transações.

- ou -

Erro ao acessar um método do serviço de Enfileiramento de Mensagens.

Exemplos

O exemplo de código a seguir envia uma cadeia de caracteres para uma fila transacional e, em seguida, recebe uma mensagem dessa fila.

#using <system.dll>
#using <system.messaging.dll>

using namespace System;
using namespace System::Messaging;

/// <summary>
/// Provides a container class for the example.
/// </summary>
ref class MyNewQueue
{
public:

   //*************************************************
   // Sends a message to a queue.
   //*************************************************
   void SendMessageTransactional()
   {
      // Connect to a queue on the local computer.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myTransactionalQueue" );

      // Send a message to the queue.
      if ( myQueue->Transactional == true )
      {
         // Create a transaction.
         MessageQueueTransaction^ myTransaction = gcnew MessageQueueTransaction;

         // Begin the transaction.
         myTransaction->Begin();

         // Send the message.
         myQueue->Send( "My Message Data.", myTransaction );

         // Commit the transaction.
         myTransaction->Commit();
      }

      return;
   }


   //*************************************************
   // Receives a message containing an Order.
   //*************************************************
   void ReceiveMessageTransactional()
   {
      // Connect to a transactional queue on the local computer.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myTransactionalQueue" );

      // Set the formatter.
      array<Type^>^p = gcnew array<Type^>(1);
      p[ 0 ] = String::typeid;
      myQueue->Formatter = gcnew XmlMessageFormatter( p );

      // Create a transaction.
      MessageQueueTransaction^ myTransaction = gcnew MessageQueueTransaction;
      try
      {
         // Begin the transaction.
         myTransaction->Begin();

         // Receive the message. 
         Message^ myMessage = myQueue->Receive( myTransaction );
         String^ myOrder = static_cast<String^>(myMessage->Body);

         // Display message information.
         Console::WriteLine( myOrder );

         // Commit the transaction.
         myTransaction->Commit();
      }
      catch ( MessageQueueException^ e ) 
      {
         // Handle nontransactional queues.
         if ( e->MessageQueueErrorCode == MessageQueueErrorCode::TransactionUsage )
         {
            Console::WriteLine( "Queue is not transactional." );
         }

         // Else catch other sources of MessageQueueException.
         // Roll back the transaction.
         myTransaction->Abort();
      }

      // Catch other exceptions as necessary, such as 
      // InvalidOperationException, thrown when the formatter 
      // cannot deserialize the message.
      return;
   }
};

//*************************************************
// Provides an entry point into the application.
// 
// This example sends and receives a message from
// a transactional queue.
//*************************************************
int main()
{
   // Create a new instance of the class.
   MyNewQueue^ myNewQueue = gcnew MyNewQueue;

   // Send a message to a queue.
   myNewQueue->SendMessageTransactional();

   // Receive a message from a queue.
   myNewQueue->ReceiveMessageTransactional();
   return 0;
}
using System;
using System.Messaging;

namespace MyProject
{

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //
        // This example sends and receives a message from
        // a transactional queue.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Send a message to a queue.
            myNewQueue.SendMessageTransactional();

            // Receive a message from a queue.
            myNewQueue.ReceiveMessageTransactional();
        
            return;
        }

        //**************************************************
        // Sends a message to a queue.
        //**************************************************
        
        public void SendMessageTransactional()
        {
                        
            // Connect to a queue on the local computer.
            MessageQueue myQueue = new
                MessageQueue(".\\myTransactionalQueue");

            // Send a message to the queue.
            if (myQueue.Transactional == true)
            {
                // Create a transaction.
                MessageQueueTransaction myTransaction = new
                    MessageQueueTransaction();

                // Begin the transaction.
                myTransaction.Begin();

                // Send the message.
                myQueue.Send("My Message Data.", myTransaction);

                // Commit the transaction.
                myTransaction.Commit();
            }

            return;
        }

        //**************************************************
        // Receives a message containing an Order.
        //**************************************************
        
        public  void ReceiveMessageTransactional()
        {
            // Connect to a transactional queue on the local computer.
            MessageQueue myQueue = new
                MessageQueue(".\\myTransactionalQueue");

            // Set the formatter.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(String)});
            
            // Create a transaction.
            MessageQueueTransaction myTransaction = new
                MessageQueueTransaction();

            try
            {
                // Begin the transaction.
                myTransaction.Begin();
                
                // Receive the message.
                Message myMessage =	myQueue.Receive(myTransaction);
                String myOrder = (String)myMessage.Body;

                // Display message information.
                Console.WriteLine(myOrder);

                // Commit the transaction.
                myTransaction.Commit();
            }
            
            catch (MessageQueueException e)
            {
                // Handle nontransactional queues.
                if (e.MessageQueueErrorCode ==
                    MessageQueueErrorCode.TransactionUsage)
                {
                    Console.WriteLine("Queue is not transactional.");
                }
                
                // Else catch other sources of MessageQueueException.

                // Roll back the transaction.
                myTransaction.Abort();
            }

            // Catch other exceptions as necessary, such as
            // InvalidOperationException, thrown when the formatter
            // cannot deserialize the message.

            return;
        }
    }
}
Imports System.Messaging

   
Public Class MyNewQueue


        '
        ' Provides an entry point into the application.
        ' 
        ' This example sends and receives a message from
        ' a transactional queue.
        '

        Public Shared Sub Main()

            ' Create a new instance of the class.
            Dim myNewQueue As New MyNewQueue

            ' Send a message to a queue.
            myNewQueue.SendMessageTransactional()

            ' Receive a message from a queue.
            myNewQueue.ReceiveMessageTransactional()

            Return

        End Sub


        '
        ' Sends a message to a queue.
        '

        Public Sub SendMessageTransactional()

            ' Connect to a queue on the local computer.
            Dim myQueue As New MessageQueue(".\myTransactionalQueue")

            ' Send a message to the queue.
            If myQueue.Transactional = True Then
                ' Create a transaction.
                Dim myTransaction As New MessageQueueTransaction

                ' Begin the transaction.
                myTransaction.Begin()

                ' Send the message.
                myQueue.Send("My Message Data.", myTransaction)

                ' Commit the transaction.
                myTransaction.Commit()
            End If

            Return

        End Sub


        '
        ' Receives a message containing an Order.
        '

        Public Sub ReceiveMessageTransactional()

            ' Connect to a transactional queue on the local computer.
            Dim myQueue As New MessageQueue(".\myTransactionalQueue")

            ' Set the formatter.
            myQueue.Formatter = New XmlMessageFormatter(New Type() _
                {GetType([String])})

            ' Create a transaction.
            Dim myTransaction As New MessageQueueTransaction

            Try

                ' Begin the transaction.
                myTransaction.Begin()

                ' Receive the message. 
                Dim myMessage As Message = _
                    myQueue.Receive(myTransaction)
                Dim myOrder As [String] = CType(myMessage.Body, _
                    [String])

                ' Display message information.
                Console.WriteLine(myOrder)

                ' Commit the transaction.
                myTransaction.Commit()


            Catch e As MessageQueueException

                ' Handle nontransactional queues.
                If e.MessageQueueErrorCode = _
                    MessageQueueErrorCode.TransactionUsage Then

                    Console.WriteLine("Queue is not transactional.")

                End If

                ' Else catch other sources of a MessageQueueException.


                ' Roll back the transaction.
                myTransaction.Abort()


                ' Catch other exceptions as necessary, such as 
                ' InvalidOperationException, thrown when the formatter
                ' cannot deserialize the message.

            End Try

            Return

        End Sub

End Class

Comentários

Use essa sobrecarga para enviar uma mensagem que contém o obj parâmetro para a fila transacional referenciada pelo MessageQueue, usando um contexto de transação interno definido pelo transaction parâmetro . O objeto que você envia para a fila pode ser um Message ou qualquer objeto gerenciado. Se você enviar qualquer objeto diferente de um Message, o objeto será serializado e inserido no corpo da mensagem.

Se você usar essa sobrecarga para enviar uma mensagem para uma fila não transacional, a mensagem poderá ser enviada para a fila de mensagens mortas sem gerar uma exceção.

Se você não definir a Formatter propriedade antes de chamar Send(Object), o formatador usará como padrão o XmlMessageFormatter.

A DefaultPropertiesToSend propriedade se aplica a qualquer objeto diferente de um Message. Se você especificar, por exemplo, um rótulo ou uma prioridade usando o DefaultPropertiesToSend membro , esses valores se aplicarão a qualquer mensagem que contenha um objeto que não seja do tipo Message quando seu aplicativo o enviar para a fila. Ao enviar um Message, os valores de propriedade definidos para o Message têm precedência sobre DefaultPropertiesToSend e a propriedade da Message.Formatter mensagem tem precedência sobre a propriedade da MessageQueue.Formatter fila.

MessageQueueTransaction é threading apartment aware, portanto, se o seu estado de apartment for STA, você não poderá usar a transação em vários threads. O Visual Basic define o estado do thread main como STA, portanto, você deve aplicar o MTAThreadAttribute na Main sub-rotina. Caso contrário, o envio de uma mensagem transacional usando outro thread gerará uma exceção MessageQueueException. Você aplica o MTAThreadAttribute usando o fragmento a seguir.

<System.MTAThreadAttribute>
 public sub Main()

A tabela a seguir mostra se esse método está disponível em vários modos de Grupo de Trabalho.

Modo de grupo de trabalho Disponível
Computador local Yes
Nome do computador local e do formato direto Yes
Computador remoto Não
Computador remoto e nome de formato direto Yes

Confira também

Aplica-se a

Send(Object, MessageQueueTransactionType)

Envia um objeto para a fila referenciada por esse MessageQueue.

public:
 void Send(System::Object ^ obj, System::Messaging::MessageQueueTransactionType transactionType);
public void Send (object obj, System.Messaging.MessageQueueTransactionType transactionType);
member this.Send : obj * System.Messaging.MessageQueueTransactionType -> unit
Public Sub Send (obj As Object, transactionType As MessageQueueTransactionType)

Parâmetros

obj
Object

O objeto a ser enviado à fila.

transactionType
MessageQueueTransactionType

Um dos valores de MessageQueueTransactionType, que descreve o tipo de contexto de transação associado à mensagem.

Exceções

O parâmetro transactionType não é um dos membros do MessageQueueTransactionType.

A propriedade Path não foi definida.

- ou -

Erro ao acessar um método do serviço de Enfileiramento de Mensagens.

Exemplos

O exemplo de código a seguir demonstra o uso de Send(Object, MessageQueueTransactionType).


// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Send the message.
queue->Send(msg, MessageQueueTransactionType::Single);

queue->Close();

// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Send the message.
queue.Send(msg, MessageQueueTransactionType.Single);

Comentários

Use essa sobrecarga para enviar uma mensagem que contém o obj parâmetro para a fila referenciada pelo MessageQueue, usando um contexto de transação definido pelo transactionType parâmetro . Especifique Automatic para o transactionType parâmetro se já houver um contexto de transação externo anexado ao thread que você deseja usar para enviar a mensagem. Especifique Single se deseja enviar a mensagem como uma única transação interna. Você pode especificar None se deseja enviar uma mensagem transacional para um thread não transacional.

O objeto que você envia para a fila pode ser um Message ou qualquer objeto gerenciado. Se você enviar qualquer objeto diferente de um Message, o objeto será serializado e inserido no corpo da mensagem.

Se você não definir a Formatter propriedade antes de chamar Send(Object), o formatador usará como padrão o XmlMessageFormatter.

A DefaultPropertiesToSend propriedade se aplica a qualquer objeto diferente de um Message. Se você especificar, por exemplo, um rótulo ou uma prioridade usando o DefaultPropertiesToSend membro , esses valores se aplicarão a qualquer mensagem que contenha um objeto que não seja do tipo Message quando seu aplicativo o enviar para a fila. Ao enviar um Message, os valores de propriedade definidos para o Message têm precedência sobre DefaultPropertiesToSend e a propriedade da Message.Formatter mensagem tem precedência sobre a propriedade da MessageQueue.Formatter fila.

A tabela a seguir mostra se esse método está disponível em vários modos de Grupo de Trabalho.

Modo de grupo de trabalho Disponível
Computador local Yes
Nome do computador local e do formato direto Yes
Computador remoto Não
Computador remoto e nome de formato direto Yes

Confira também

Aplica-se a

Send(Object, String)

Envia um objeto para a fila não transacional referenciada por este MessageQueue e especifica um rótulo para a mensagem.

public:
 void Send(System::Object ^ obj, System::String ^ label);
public void Send (object obj, string label);
member this.Send : obj * string -> unit
Public Sub Send (obj As Object, label As String)

Parâmetros

obj
Object

O objeto a ser enviado à fila.

label
String

O rótulo da mensagem.

Exceções

O parâmetro label é null.

A propriedade Path não foi definida.

- ou -

Erro ao acessar um método do serviço de Enfileiramento de Mensagens.

Exemplos

O exemplo de código a seguir demonstra o uso de Send(Object, String).


// Connect to a queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Send the message.
queue->Send(msg, "Example Message Label");

queue->Close();

// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Send the message.
queue.Send(msg, "Example Message Label");

Comentários

Use essa sobrecarga para enviar uma mensagem que contém o obj parâmetro para a fila referenciada pelo MessageQueue. Com essa sobrecarga, você pode especificar o rótulo de cadeia de caracteres que identifica a mensagem. O objeto que você envia para a fila pode ser um Message, uma estrutura, um objeto de dados ou qualquer objeto gerenciado. Se você enviar qualquer objeto diferente de um Message, o objeto será serializado e inserido no corpo da mensagem.

O rótulo da mensagem é distinto do rótulo da fila de mensagens, mas ambos são dependentes do aplicativo e não têm nenhum significado herdado para o Enfileiramento de Mensagens.

Se você usar essa sobrecarga para enviar uma mensagem para uma fila transacional, a mensagem será enviada para a fila de mensagens mortas. Se você quiser que a mensagem faça parte de uma transação que contenha outras mensagens, use uma sobrecarga que usa um MessageQueueTransaction ou MessageQueueTransactionType como parâmetro.

A Path propriedade dessa MessageQueue instância deve ser especificada antes de você enviar a mensagem. Se você não definir a Formatter propriedade antes de chamar Send(Object), o formatador usará como padrão o XmlMessageFormatter.

A DefaultPropertiesToSend propriedade se aplica a qualquer objeto diferente de um Message. Se você especificar, por exemplo, um rótulo ou uma prioridade usando o DefaultPropertiesToSend membro , esses valores se aplicarão a qualquer mensagem que contenha um objeto que não seja do tipo Message quando seu aplicativo o enviar para a fila. Ao enviar um Message, os valores de propriedade definidos para o Message têm precedência sobre DefaultPropertiesToSend e a propriedade da Message.Formatter mensagem tem precedência sobre a propriedade da MessageQueue.Formatter fila.

A tabela a seguir mostra se esse método está disponível em vários modos de Grupo de Trabalho.

Modo de grupo de trabalho Disponível
Computador local Yes
Nome do computador local e do formato direto Yes
Computador remoto Não
Computador remoto e nome de formato direto Yes

Confira também

Aplica-se a

Send(Object, String, MessageQueueTransaction)

Envia um objeto para a fila transacional referenciada por este MessageQueue e especifica um rótulo para a mensagem.

public:
 void Send(System::Object ^ obj, System::String ^ label, System::Messaging::MessageQueueTransaction ^ transaction);
public void Send (object obj, string label, System.Messaging.MessageQueueTransaction transaction);
member this.Send : obj * string * System.Messaging.MessageQueueTransaction -> unit
Public Sub Send (obj As Object, label As String, transaction As MessageQueueTransaction)

Parâmetros

obj
Object

O objeto a ser enviado à fila.

label
String

O rótulo da mensagem.

Exceções

O parâmetro label é null.

- ou -

O parâmetro transaction é null.

A propriedade Path não foi definida.

- ou -

O aplicativo do serviço de enfileiramento de mensagens indicou um uso incorreto de transação.

- ou -

Erro ao acessar um método do serviço de Enfileiramento de Mensagens.

Exemplos

O exemplo de código a seguir demonstra o uso de Send(Object, String, MessageQueueTransaction).


// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();

try
{
    // Begin a transaction.
    transaction->Begin();

    // Send the message to the queue.
    queue->Send(msg, "Example Message Label", transaction);

    // Commit the transaction.
    transaction->Commit();
}
catch (Exception^ ex)
{
    // Cancel the transaction.
    transaction->Abort();

    // Propagate the exception.
    throw ex;
}
finally
{
    // Dispose of the transaction object.
    delete transaction;
    queue->Close();
}

// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();

try
{
    // Begin a transaction.
    transaction.Begin();

    // Send the message to the queue.
    queue.Send(msg, "Example Message Label", transaction);

    // Commit the transaction.
    transaction.Commit();
}
catch(System.Exception e)
{
    // Cancel the transaction.
    transaction.Abort();

    // Propagate the exception.
    throw e;
}
finally
{
    // Dispose of the transaction object.
    transaction.Dispose();
}

Comentários

Use essa sobrecarga para enviar uma mensagem que contém o obj parâmetro para a fila transacional referenciada pelo MessageQueue, usando um contexto de transação interno definido pelo transaction parâmetro . Com essa sobrecarga, você pode especificar o rótulo de cadeia de caracteres que identifica a mensagem. O objeto que você envia para a fila pode ser um Message, uma estrutura, um objeto de dados ou qualquer objeto gerenciado. Se você enviar qualquer objeto diferente de um Message, o objeto será serializado e inserido no corpo da mensagem.

O rótulo da mensagem é distinto do rótulo da fila de mensagens, mas ambos são dependentes do aplicativo e não têm nenhum significado herdado para o Enfileiramento de Mensagens.

Se você usar essa sobrecarga para enviar uma mensagem para uma fila não transacional, a mensagem poderá ser enviada para a fila de mensagens mortas sem gerar uma exceção.

Se você não definir a Formatter propriedade antes de chamar Send(Object), o formatador usará como padrão o XmlMessageFormatter.

A DefaultPropertiesToSend propriedade se aplica a qualquer objeto diferente de um Message. Se você especificar, por exemplo, um rótulo ou uma prioridade usando o DefaultPropertiesToSend membro , esses valores se aplicarão a qualquer mensagem que contenha um objeto que não seja do tipo Message quando seu aplicativo o enviar para a fila. Ao enviar um Message, os valores de propriedade definidos para o Message têm precedência sobre DefaultPropertiesToSend e a propriedade da Message.Formatter mensagem tem precedência sobre a propriedade da MessageQueue.Formatter fila

MessageQueueTransaction é threading apartment aware, portanto, se o seu estado de apartment for STA, você não poderá usar a transação em vários threads. O Visual Basic define o estado do thread main como STA, portanto, você deve aplicar o MTAThreadAttribute na Main sub-rotina. Caso contrário, o envio de uma mensagem transacional usando outro thread gerará uma exceção MessageQueueException. Você aplica o MTAThreadAttribute usando o fragmento a seguir.

<System.MTAThreadAttribute>
 public sub Main()

A tabela a seguir mostra se esse método está disponível em vários modos de Grupo de Trabalho.

Modo de grupo de trabalho Disponível
Computador local Yes
Nome do computador local e do formato direto Yes
Computador remoto Não
Computador remoto e nome de formato direto Yes

Confira também

Aplica-se a

Send(Object, String, MessageQueueTransactionType)

Envia um objeto para a fila referenciada por esse MessageQueue e especifica um rótulo para a mensagem.

public:
 void Send(System::Object ^ obj, System::String ^ label, System::Messaging::MessageQueueTransactionType transactionType);
public void Send (object obj, string label, System.Messaging.MessageQueueTransactionType transactionType);
member this.Send : obj * string * System.Messaging.MessageQueueTransactionType -> unit
Public Sub Send (obj As Object, label As String, transactionType As MessageQueueTransactionType)

Parâmetros

obj
Object

O objeto a ser enviado à fila.

label
String

O rótulo da mensagem.

transactionType
MessageQueueTransactionType

Um dos valores de MessageQueueTransactionType, que descreve o tipo de contexto de transação associado à mensagem.

Exceções

O parâmetro label é null.

O aplicativo do serviço de enfileiramento de mensagens indicou um uso incorreto de transação.

O parâmetro transactionType não é um dos membros do MessageQueueTransactionType.

A propriedade Path não foi definida.

- ou -

Erro ao acessar um método do serviço de Enfileiramento de Mensagens.

Exemplos

O exemplo de código a seguir demonstra o uso de Send(Object, String, MessageQueueTransactionType).


// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message^ msg = gcnew Message("Example Message Body");

// Send the message.
queue->Send(msg, "Example Message Label",
    MessageQueueTransactionType::Single);

queue->Close();

// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");

// Create a new message.
Message msg = new Message("Example Message Body");

// Send the message.
queue.Send(msg, "Example Message Label",
    MessageQueueTransactionType.Single);

Comentários

Use essa sobrecarga para enviar uma mensagem que contém o obj parâmetro para a fila referenciada pelo MessageQueue, usando um contexto de transação definido pelo transactionType parâmetro . Especifique Automatic para o transactionType parâmetro se já houver um contexto de transação externo anexado ao thread que você deseja usar para enviar a mensagem. Especifique Single se deseja enviar a mensagem como uma única transação interna. Você pode especificar None se deseja enviar uma mensagem transacional para um thread não transacional.

O objeto que você envia para a fila pode ser um Message ou qualquer objeto gerenciado. Se você enviar qualquer objeto diferente de um Message, o objeto será serializado e inserido no corpo da mensagem. Com essa sobrecarga, você pode especificar o rótulo de cadeia de caracteres que identifica a mensagem.

O rótulo da mensagem é distinto do rótulo da fila de mensagens, mas ambos são dependentes do aplicativo e não têm nenhum significado herdado para o Enfileiramento de Mensagens.

Se você não definir a Formatter propriedade antes de chamar Send(Object), o formatador usará como padrão o XmlMessageFormatter.

A DefaultPropertiesToSend propriedade se aplica a qualquer objeto diferente de um Message. Se você especificar, por exemplo, um rótulo ou uma prioridade usando o DefaultPropertiesToSend membro , esses valores se aplicarão a qualquer mensagem que contenha um objeto que não seja do tipo Message quando seu aplicativo o enviar para a fila. Ao enviar um Message, os valores de propriedade definidos para a Message têm precedência sobre DefaultPropertiesToSende a propriedade da Message.Formatter mensagem tem precedência sobre a propriedade da MessageQueue.Formatter fila.

A tabela a seguir mostra se esse método está disponível em vários modos de Grupo de Trabalho.

Modo de grupo de trabalho Disponível
Computador local Yes
Nome do computador local e do formato direto Yes
Computador remoto Não
Computador remoto e nome de formato direto Yes

Confira também

Aplica-se a