MessageQueue.Send Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.
- transaction
- MessageQueueTransaction
O objeto MessageQueueTransaction.
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
- DefaultPropertiesToSend
- Message
- MessageQueueTransaction
- Transactional
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()
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
- MessageQueueTransactionType
- DefaultPropertiesToSend
- Message
- Transactional
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()
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.
- transaction
- MessageQueueTransaction
O objeto MessageQueueTransaction.
Exceções
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
- DefaultPropertiesToSend
- Message
- MessageQueueTransaction
- Transactional
- Label
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()
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
- MessageQueueTransactionType
- DefaultPropertiesToSend
- Message
- Transactional
- Label
- Peek()
- Receive()
- BeginPeek()
- BeginReceive()