MessageQueue.Receive Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Ontvangt het eerste bericht in de wachtrij en verwijdert het uit de wachtrij.
Overloads
| Name | Description |
|---|---|
| Receive() |
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en blokkeert de huidige thread van de uitvoering totdat een bericht beschikbaar is. |
| Receive(MessageQueueTransaction) |
Ontvangt het eerste bericht dat beschikbaar is in de transactionele wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en blokkeert de huidige thread van de uitvoering totdat een bericht beschikbaar is. |
| Receive(MessageQueueTransactionType) |
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en blokkeert de huidige thread van de uitvoering totdat een bericht beschikbaar is. |
| Receive(TimeSpan) |
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue en wacht totdat een bericht beschikbaar is in de wachtrij of de time-out verloopt. |
| Receive(TimeSpan, Cursor) |
Ontvangt het huidige bericht in de wachtrij met behulp van een opgegeven cursor. Als er geen bericht beschikbaar is, wacht deze methode totdat een bericht beschikbaar is of de time-out verloopt. |
| Receive(TimeSpan, MessageQueueTransaction) |
Ontvangt het eerste bericht dat beschikbaar is in de transactionele wachtrij waarnaar wordt verwezen door de MessageQueue en wacht totdat een bericht beschikbaar is in de wachtrij of de time-out verloopt. |
| Receive(TimeSpan, MessageQueueTransactionType) |
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en wacht totdat een bericht beschikbaar is in de wachtrij of de time-out verloopt. |
| Receive(TimeSpan, Cursor, MessageQueueTransaction) |
Ontvangt het huidige bericht in de wachtrij met behulp van een opgegeven cursor. Als er geen bericht beschikbaar is, wacht deze methode totdat een bericht beschikbaar is of de time-out verloopt. |
| Receive(TimeSpan, Cursor, MessageQueueTransactionType) |
Ontvangt het huidige bericht in de wachtrij met behulp van een opgegeven cursor. Als er geen bericht beschikbaar is, wacht deze methode totdat een bericht beschikbaar is of de time-out verloopt. |
Receive()
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en blokkeert de huidige thread van de uitvoering totdat een bericht beschikbaar is.
public:
System::Messaging::Message ^ Receive();
public System.Messaging.Message Receive();
member this.Receive : unit -> System.Messaging.Message
Public Function Receive () As Message
Retouren
Een Message die verwijst naar het eerste bericht dat beschikbaar is in de wachtrij.
Uitzonderingen
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld wordt een bericht uit een wachtrij ontvangen en wordt informatie over dat bericht naar het scherm verzonden.
#using <system.dll>
#using <system.messaging.dll>
using namespace System;
using namespace System::Messaging;
// This class represents an object the following example
// sends to a queue and receives from a queue.
ref class Order
{
public:
int orderId;
DateTime orderTime;
};
/// <summary>
/// Provides a container class for the example.
/// </summary>
ref class MyNewQueue
{
public:
//*************************************************
// Sends an Order to a queue.
//*************************************************
void SendMessage()
{
// Create a new order and set values.
Order^ sentOrder = gcnew Order;
sentOrder->orderId = 3;
sentOrder->orderTime = DateTime::Now;
// Connect to a queue on the local computer.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Send the Order to the queue.
myQueue->Send( sentOrder );
return;
}
//*************************************************
// Receives a message containing an Order.
//*************************************************
void ReceiveMessage()
{
// Connect to the a queue on the local computer.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Set the formatter to indicate body contains an Order.
array<Type^>^p = gcnew array<Type^>(1);
p[ 0 ] = Order::typeid;
myQueue->Formatter = gcnew XmlMessageFormatter( p );
try
{
// Receive and format the message.
Message^ myMessage = myQueue->Receive();
Order^ myOrder = static_cast<Order^>(myMessage->Body);
// Display message information.
Console::WriteLine( "Order ID: {0}", myOrder->orderId );
Console::WriteLine( "Sent: {0}", myOrder->orderTime );
}
catch ( MessageQueueException^ )
{
// Handle Message Queuing exceptions.
}
// Handle invalid serialization format.
catch ( InvalidOperationException^ e )
{
Console::WriteLine( e->Message );
}
// Catch other exceptions as necessary.
return;
}
};
//*************************************************
// Provides an entry point into the application.
//
// This example sends and receives a message from
// a queue.
//*************************************************
int main()
{
// Create a new instance of the class.
MyNewQueue^ myNewQueue = gcnew MyNewQueue;
// Send a message to a queue.
myNewQueue->SendMessage();
// Receive a message from a queue.
myNewQueue->ReceiveMessage();
return 0;
}
using System;
using System.Messaging;
namespace MyProject
{
// This class represents an object the following example
// sends to a queue and receives from a queue.
public class Order
{
public int orderId;
public DateTime orderTime;
};
/// <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 queue.
//**************************************************
public static void Main()
{
// Create a new instance of the class.
MyNewQueue myNewQueue = new MyNewQueue();
// Send a message to a queue.
myNewQueue.SendMessage();
// Receive a message from a queue.
myNewQueue.ReceiveMessage();
return;
}
//**************************************************
// Sends an Order to a queue.
//**************************************************
public void SendMessage()
{
// Create a new order and set values.
Order sentOrder = new Order();
sentOrder.orderId = 3;
sentOrder.orderTime = DateTime.Now;
// Connect to a queue on the local computer.
MessageQueue myQueue = new MessageQueue(".\\myQueue");
// Send the Order to the queue.
myQueue.Send(sentOrder);
return;
}
//**************************************************
// Receives a message containing an Order.
//**************************************************
public void ReceiveMessage()
{
// Connect to the a queue on the local computer.
MessageQueue myQueue = new MessageQueue(".\\myQueue");
// Set the formatter to indicate body contains an Order.
myQueue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(MyProject.Order)});
try
{
// Receive and format the message.
Message myMessage = myQueue.Receive();
Order myOrder = (Order)myMessage.Body;
// Display message information.
Console.WriteLine("Order ID: " +
myOrder.orderId.ToString());
Console.WriteLine("Sent: " +
myOrder.orderTime.ToString());
}
catch (MessageQueueException)
{
// Handle Message Queuing exceptions.
}
// Handle invalid serialization format.
catch (InvalidOperationException e)
{
Console.WriteLine(e.Message);
}
// Catch other exceptions as necessary.
return;
}
}
}
Imports System.Messaging
' This class represents an object the following example
' sends to a queue and receives from a queue.
Public Class Order
Public orderId As Integer
Public orderTime As DateTime
End Class
Public Class MyNewQueue
'
' Provides an entry point into the application.
'
' This example sends and receives a message from
' a qeue.
'
Public Shared Sub Main()
' Create a new instance of the class.
Dim myNewQueue As New MyNewQueue()
' Send a message to a queue.
myNewQueue.SendMessage()
' Receive a message from a queue.
myNewQueue.ReceiveMessage()
Return
End Sub
'
' Sends an Order to a queue.
'
Public Sub SendMessage()
' Create a new order and set values.
Dim sentOrder As New Order()
sentOrder.orderId = 3
sentOrder.orderTime = DateTime.Now
' Connect to a queue on the local computer.
Dim myQueue As New MessageQueue(".\myQueue")
' Send the Order to the queue.
myQueue.Send(sentOrder)
Return
End Sub
'
' Receives a message containing an Order.
'
Public Sub ReceiveMessage()
' Connect to the a queue on the local computer.
Dim myQueue As New MessageQueue(".\myQueue")
' Set the formatter to indicate the body contains an Order.
myQueue.Formatter = New XmlMessageFormatter(New Type() _
{GetType(Order)})
Try
' Receive and format the message.
Dim myMessage As Message = myQueue.Receive()
Dim myOrder As Order = CType(myMessage.Body, Order)
' Display message information.
Console.WriteLine(("Order ID: " + _
myOrder.orderId.ToString()))
Console.WriteLine(("Sent: " + _
myOrder.orderTime.ToString()))
Catch m As MessageQueueException
' Handle Message Queuing exceptions.
Catch e As InvalidOperationException
' Handle invalid serialization format.
Console.WriteLine(e.Message)
' Catch other exceptions as necessary.
End Try
Return
End Sub
End Class
Opmerkingen
Gebruik deze overbelasting om een bericht uit een wachtrij te ontvangen of wacht tot er berichten in de wachtrij staan.
Met Receive de methode kan een bericht synchroon worden gelezen, waardoor het uit de wachtrij wordt verwijderd. Volgende aanroepen Receive retourneren de berichten die volgen in de wachtrij of nieuwe berichten met een hogere prioriteit.
Als u het eerste bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. De Peek methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. Omdat deze overbelasting van de Receive methode een oneindige time-out opgeeft, kan de toepassing voor onbepaalde tijd wachten. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op het bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Receive(MessageQueueTransaction)
Ontvangt het eerste bericht dat beschikbaar is in de transactionele wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en blokkeert de huidige thread van de uitvoering totdat een bericht beschikbaar is.
public:
System::Messaging::Message ^ Receive(System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message Receive(System.Messaging.MessageQueueTransaction transaction);
member this.Receive : System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function Receive (transaction As MessageQueueTransaction) As Message
Parameters
- transaction
- MessageQueueTransaction
Het MessageQueueTransaction-object.
Retouren
Een Message die verwijst naar het eerste bericht dat beschikbaar is in de wachtrij.
Uitzonderingen
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
– of –
De wachtrij is niet-transactioneel.
Voorbeelden
Het volgende codevoorbeeld maakt verbinding met een transactionele wachtrij op de lokale computer en verzendt een bericht naar de wachtrij. Vervolgens wordt het bericht met een bestelling ontvangen. Als er een niet-transactionele wachtrij optreedt, wordt de transactie gegenereerd en teruggedraaid en teruggedraaid.
#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 )
{
// 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 a 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)
{
// 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 a 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
Opmerkingen
Gebruik deze overbelasting om een bericht van een transactionele wachtrij te ontvangen met behulp van de interne transactiecontext die is gedefinieerd door de transaction parameter, of wacht tot er berichten in de wachtrij staan.
Met Receive de methode kan een bericht synchroon worden gelezen, waardoor het uit de wachtrij wordt verwijderd. Volgende aanroepen worden Receive de berichten die volgen in de wachtrij geretourneerd.
Omdat deze methode wordt aangeroepen in een transactionele wachtrij, wordt het ontvangen bericht geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Als u het eerste bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. De Peek methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar Peek. Omdat Peek er geen berichten in de wachtrij worden verwijderd, zou er niets zijn om terug te draaien door een oproep naar Abort.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. Omdat deze overbelasting van de Receive methode een oneindige time-out opgeeft, kan de toepassing voor onbepaalde tijd wachten. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op het bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Receive(MessageQueueTransactionType)
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en blokkeert de huidige thread van de uitvoering totdat een bericht beschikbaar is.
public:
System::Messaging::Message ^ Receive(System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message Receive(System.Messaging.MessageQueueTransactionType transactionType);
member this.Receive : System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function Receive (transactionType As MessageQueueTransactionType) As Message
Parameters
- transactionType
- MessageQueueTransactionType
Een van de MessageQueueTransactionType waarden die het type transactiecontext beschrijven dat aan het bericht moet worden gekoppeld.
Retouren
Een Message die verwijst naar het eerste bericht dat beschikbaar is in de wachtrij.
Uitzonderingen
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
De transactionType parameter is geen van de MessageQueueTransactionType leden.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van Receive(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);
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Set the formatter to indicate the message body contains a String.
queue->Formatter = gcnew XmlMessageFormatter(
gcnew array<Type^>{String::typeid});
// Receive the message from the queue. Because the Id of the message
// , it might not be the message just sent.
msg = queue->Receive(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);
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Set the formatter to indicate the message body contains a String.
queue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(String)});
// Receive the message from the queue. Because the Id of the message
// , it might not be the message just sent.
msg = queue.Receive(MessageQueueTransactionType.Single);
Opmerkingen
Gebruik deze overbelasting om een bericht van een wachtrij te ontvangen met behulp van een transactiecontext die is gedefinieerd door de transactionType parameter, of wacht tot er berichten in de wachtrij staan.
Geef Automatic op voor de transactionType parameter als er al een externe transactiecontext is gekoppeld aan de thread die u wilt gebruiken om het bericht te ontvangen. Geef op Single of u het bericht wilt ontvangen als één interne transactie. U kunt opgeven None of u een bericht wilt ontvangen van een transactionele wachtrij buiten een transactiecontext.
Met Receive de methode kan een bericht synchroon worden gelezen, waardoor het uit de wachtrij wordt verwijderd. Volgende aanroepen worden Receive de berichten die volgen in de wachtrij geretourneerd.
Als deze methode wordt aangeroepen om een bericht te ontvangen van een transactionele wachtrij, wordt het bericht dat wordt ontvangen, geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Als u het eerste bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. De Peek methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar Peek. Omdat Peek er geen berichten in de wachtrij worden verwijderd, zou er niets zijn om terug te draaien door een oproep naar Abort.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. Omdat deze overbelasting van de Receive methode een oneindige time-out opgeeft, kan de toepassing voor onbepaalde tijd wachten. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op het bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Receive(TimeSpan)
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue en wacht totdat een bericht beschikbaar is in de wachtrij of de time-out verloopt.
public:
System::Messaging::Message ^ Receive(TimeSpan timeout);
public System.Messaging.Message Receive(TimeSpan timeout);
member this.Receive : TimeSpan -> System.Messaging.Message
Public Function Receive (timeout As TimeSpan) As Message
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
Retouren
Een Message die verwijst naar het eerste bericht dat beschikbaar is in de wachtrij.
Uitzonderingen
De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
Er is geen bericht binnengekomen in de wachtrij voordat de time-out is verlopen.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode
Voorbeelden
In het volgende codevoorbeeld wordt een bericht uit een wachtrij ontvangen en wordt informatie over dat bericht naar het scherm verzonden. In het voorbeeld wordt de uitvoering tot vijf seconden onderbroken terwijl wordt gewacht tot een bericht in de wachtrij binnenkomt.
#using <system.dll>
#using <system.messaging.dll>
using namespace System;
using namespace System::Messaging;
// This class represents an object the following example
// receives from a queue.
ref class Order
{
public:
int orderId;
DateTime orderTime;
};
/// <summary>
/// Provides a container class for the example.
/// </summary>
ref class MyNewQueue
{
public:
//*************************************************
// Receives a message containing an Order.
//*************************************************
void ReceiveMessage()
{
// Connect to the a queue on the local computer.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Set the formatter to indicate body contains an Order.
array<Type^>^p = gcnew array<Type^>(1);
p[ 0 ] = Order::typeid;
myQueue->Formatter = gcnew XmlMessageFormatter( p );
try
{
// Receive and format the message.
// Wait 5 seconds for a message to arrive.
Message^ myMessage = myQueue->Receive( TimeSpan(0,0,5) );
Order^ myOrder = static_cast<Order^>(myMessage->Body);
// Display message information.
Console::WriteLine( "Order ID: {0}", myOrder->orderId );
Console::WriteLine( "Sent: {0}", myOrder->orderTime );
}
catch ( MessageQueueException^ e )
{
// Handle no message arriving in the queue.
if ( e->MessageQueueErrorCode == MessageQueueErrorCode::IOTimeout )
{
Console::WriteLine( "No message arrived in queue." );
}
// Handle other sources of a MessageQueueException.
}
// Handle invalid serialization format.
catch ( InvalidOperationException^ e )
{
Console::WriteLine( e->Message );
}
// Catch other exceptions as necessary.
return;
}
};
//*************************************************
// Provides an entry point into the application.
//
// This example receives a message from a queue.
//*************************************************
int main()
{
// Create a new instance of the class.
MyNewQueue^ myNewQueue = gcnew MyNewQueue;
// Receive a message from a queue.
myNewQueue->ReceiveMessage();
return 0;
}
using System;
using System.Messaging;
namespace MyProject
{
// This class represents an object the following example
// receives from a queue.
public class Order
{
public int orderId;
public DateTime orderTime;
};
/// <summary>
/// Provides a container class for the example.
/// </summary>
public class MyNewQueue
{
//**************************************************
// Provides an entry point into the application.
//
// This example receives a message from a queue.
//**************************************************
public static void Main()
{
// Create a new instance of the class.
MyNewQueue myNewQueue = new MyNewQueue();
// Receive a message from a queue.
myNewQueue.ReceiveMessage();
return;
}
//**************************************************
// Receives a message containing an Order.
//**************************************************
public void ReceiveMessage()
{
// Connect to the a queue on the local computer.
MessageQueue myQueue = new MessageQueue(".\\myQueue");
// Set the formatter to indicate body contains an Order.
myQueue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(MyProject.Order)});
try
{
// Receive and format the message.
// Wait 5 seconds for a message to arrive.
Message myMessage = myQueue.Receive(new
TimeSpan(0,0,5));
Order myOrder = (Order)myMessage.Body;
// Display message information.
Console.WriteLine("Order ID: " +
myOrder.orderId.ToString());
Console.WriteLine("Sent: " +
myOrder.orderTime.ToString());
}
catch (MessageQueueException e)
{
// Handle no message arriving in the queue.
if (e.MessageQueueErrorCode ==
MessageQueueErrorCode.IOTimeout)
{
Console.WriteLine("No message arrived in queue.");
}
// Handle other sources of a MessageQueueException.
}
// Handle invalid serialization format.
catch (InvalidOperationException e)
{
Console.WriteLine(e.Message);
}
// Catch other exceptions as necessary.
return;
}
}
}
Imports System.Messaging
' This class represents an object the following example
' receives from a queue.
Public Class Order
Public orderId As Integer
Public orderTime As DateTime
End Class
Public Class MyNewQueue
'
' Provides an entry point into the application.
'
' This example receives a message from a queue.
'
Public Shared Sub Main()
' Create a new instance of the class.
Dim myNewQueue As New MyNewQueue()
' Receive a message from a queue.
myNewQueue.ReceiveMessage()
Return
End Sub
'
' Receives a message containing an Order.
'
Public Sub ReceiveMessage()
' Connect to the a queue on the local computer.
Dim myQueue As New MessageQueue(".\myQueue")
' Set the formatter to indicate body contains an Order.
myQueue.Formatter = New XmlMessageFormatter(New Type() _
{GetType(Order)})
Try
' Receive and format the message.
' Wait 5 seconds for a message to arrive.
Dim myMessage As Message = myQueue.Receive(New _
TimeSpan(0, 0, 5))
Dim myOrder As Order = CType(myMessage.Body, Order)
' Display message information.
Console.WriteLine(("Order ID: " + _
myOrder.orderId.ToString()))
Console.WriteLine(("Sent: " + _
myOrder.orderTime.ToString()))
Catch e As MessageQueueException
' Handle no message arriving in the queue.
If e.MessageQueueErrorCode = _
MessageQueueErrorCode.IOTimeout Then
Console.WriteLine("No message arrived in queue.")
End If
' Handle other sources of a MessageQueueException.
Catch e As InvalidOperationException
' Handle invalid serialization format.
Console.WriteLine(e.Message)
' Catch other exceptions as necessary.
End Try
Return
End Sub
End Class
Opmerkingen
Gebruik deze overbelasting om een bericht te ontvangen en in een opgegeven periode terug te keren als er geen berichten in de wachtrij staan.
Met de Receive methode kan een bericht synchroon worden gelezen en uit de wachtrij worden verwijderd. Volgende aanroepen Receive retourneren de berichten die volgen in de wachtrij of nieuwe berichten met een hogere prioriteit.
Als u het eerste bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. De Peek methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. De thread wordt geblokkeerd voor de opgegeven periode of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op een bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Receive(TimeSpan, Cursor)
Ontvangt het huidige bericht in de wachtrij met behulp van een opgegeven cursor. Als er geen bericht beschikbaar is, wacht deze methode totdat een bericht beschikbaar is of de time-out verloopt.
public:
System::Messaging::Message ^ Receive(TimeSpan timeout, System::Messaging::Cursor ^ cursor);
public System.Messaging.Message Receive(TimeSpan timeout, System.Messaging.Cursor cursor);
member this.Receive : TimeSpan * System.Messaging.Cursor -> System.Messaging.Message
Public Function Receive (timeout As TimeSpan, cursor As Cursor) As Message
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
Retouren
Een Message die verwijst naar het eerste bericht dat beschikbaar is in de wachtrij.
Uitzonderingen
De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
Er is geen bericht binnengekomen in de wachtrij voordat de time-out is verlopen.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode
Gebruik deze overbelasting om een bericht te ontvangen en in een opgegeven periode terug te keren als er geen berichten in de wachtrij staan.
Van toepassing op
Receive(TimeSpan, MessageQueueTransaction)
Ontvangt het eerste bericht dat beschikbaar is in de transactionele wachtrij waarnaar wordt verwezen door de MessageQueue en wacht totdat een bericht beschikbaar is in de wachtrij of de time-out verloopt.
public:
System::Messaging::Message ^ Receive(TimeSpan timeout, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message Receive(TimeSpan timeout, System.Messaging.MessageQueueTransaction transaction);
member this.Receive : TimeSpan * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function Receive (timeout As TimeSpan, transaction As MessageQueueTransaction) As Message
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
- transaction
- MessageQueueTransaction
Het MessageQueueTransaction-object.
Retouren
Een Message die verwijst naar het eerste bericht dat beschikbaar is in de wachtrij.
Uitzonderingen
De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
Er is geen bericht binnengekomen in de wachtrij voordat de time-out is verlopen.
– of –
De wachtrij is niet-transactioneel.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van deze methode.
#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 transactional 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)
{
// 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 from the transactional queue.
//*************************************************
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.
// Wait five seconds for a message to arrive.
Message^ myMessage = myQueue->Receive( TimeSpan(0,0,5), 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." );
}
// Handle no message arriving in the queue.
else
// Handle no message arriving in the queue.
if ( e->MessageQueueErrorCode == MessageQueueErrorCode::IOTimeout )
{
Console::WriteLine( "No message in queue." );
}
// 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 transactional 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)
{
// 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 from the transactional queue.
//**************************************************
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.
// Wait five seconds for a message to arrive.
Message myMessage = myQueue.Receive(new
TimeSpan(0,0,5), 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.");
}
// Handle no message arriving in the queue.
else if (e.MessageQueueErrorCode ==
MessageQueueErrorCode.IOTimeout)
{
Console.WriteLine("No message in queue.");
}
// 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
Namespace MyProj
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 transactional 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 from the transactional queue.
'**************************************************
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.
' Wait five seconds for a message to arrive.
Dim myMessage As Message = myQueue.Receive(New _
TimeSpan(0, 0, 5), 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.")
Else
' Handle no message arriving in the queue.
If e.MessageQueueErrorCode = _
MessageQueueErrorCode.IOTimeout Then
Console.WriteLine("No message in queue.")
End If
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
End Namespace 'MyProj
Opmerkingen
Gebruik deze overbelasting om een bericht van een transactionele wachtrij te ontvangen met behulp van de interne transactiecontext die is gedefinieerd door de transaction parameter en binnen een opgegeven periode te retourneren als er geen berichten in de wachtrij staan.
Met Receive de methode kan een bericht synchroon worden gelezen, waardoor het uit de wachtrij wordt verwijderd. Volgende aanroepen worden Receive de berichten die volgen in de wachtrij geretourneerd.
Omdat deze methode wordt aangeroepen in een transactionele wachtrij, wordt het ontvangen bericht geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Als u het eerste bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. De Peek methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar Peek. Omdat Peek er geen berichten in de wachtrij worden verwijderd, zou er niets zijn om terug te draaien door een oproep naar Abort.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. De thread wordt geblokkeerd voor de opgegeven periode of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op een bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Receive(TimeSpan, MessageQueueTransactionType)
Ontvangt het eerste bericht dat beschikbaar is in de wachtrij waarnaar wordt verwezen door de MessageQueue. Deze aanroep is synchroon en wacht totdat een bericht beschikbaar is in de wachtrij of de time-out verloopt.
public:
System::Messaging::Message ^ Receive(TimeSpan timeout, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message Receive(TimeSpan timeout, System.Messaging.MessageQueueTransactionType transactionType);
member this.Receive : TimeSpan * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function Receive (timeout As TimeSpan, transactionType As MessageQueueTransactionType) As Message
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
- transactionType
- MessageQueueTransactionType
Een van de MessageQueueTransactionType waarden die het type transactiecontext beschrijven dat aan het bericht moet worden gekoppeld.
Retouren
Een Message die verwijst naar het eerste bericht dat beschikbaar is in de wachtrij.
Uitzonderingen
De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
De transactionType parameter is geen van de MessageQueueTransactionType leden.
Er is geen bericht binnengekomen in de wachtrij voordat de time-out is verlopen.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van deze methode.
// 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);
// Set the formatter to indicate the message body contains a String.
queue->Formatter = gcnew XmlMessageFormatter(
gcnew array<Type^>{String::typeid});
// Receive the message from the queue. Because the Id of the message
// is not specified, it might not be the message just sent.
msg = queue->Receive(TimeSpan::FromSeconds(10.0),
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);
// Set the formatter to indicate the message body contains a String.
queue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(String)});
// Receive the message from the queue. Because the Id of the message
// is not specified, it might not be the message just sent.
msg = queue.Receive(TimeSpan.FromSeconds(10.0),
MessageQueueTransactionType.Single);
Opmerkingen
Gebruik deze overbelasting om een bericht van een wachtrij te ontvangen met behulp van een transactiecontext die is gedefinieerd door de transactionType parameter en in een opgegeven periode te retourneren als er geen berichten in de wachtrij staan.
Geef Automatic op voor de transactionType parameter als er al een externe transactiecontext is gekoppeld aan de thread die u wilt gebruiken om het bericht te ontvangen. Geef op Single of u het bericht wilt ontvangen als één interne transactie. U kunt opgeven None of u een bericht wilt ontvangen van een transactionele wachtrij buiten een transactiecontext.
Met Receive de methode kan een bericht synchroon worden gelezen, waardoor het uit de wachtrij wordt verwijderd. Volgende aanroepen worden Receive de berichten die volgen in de wachtrij geretourneerd.
Als deze methode wordt aangeroepen om een bericht te ontvangen van een transactionele wachtrij, wordt het bericht dat wordt ontvangen, geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Als u het eerste bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. De Peek methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar Peek. Omdat Peek er geen berichten in de wachtrij worden verwijderd, zou er niets zijn om terug te draaien door een oproep naar Abort.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. De thread wordt geblokkeerd voor de opgegeven periode of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op een bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Receive(TimeSpan, Cursor, MessageQueueTransaction)
Ontvangt het huidige bericht in de wachtrij met behulp van een opgegeven cursor. Als er geen bericht beschikbaar is, wacht deze methode totdat een bericht beschikbaar is of de time-out verloopt.
public:
System::Messaging::Message ^ Receive(TimeSpan timeout, System::Messaging::Cursor ^ cursor, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message Receive(TimeSpan timeout, System.Messaging.Cursor cursor, System.Messaging.MessageQueueTransaction transaction);
member this.Receive : TimeSpan * System.Messaging.Cursor * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function Receive (timeout As TimeSpan, cursor As Cursor, transaction As MessageQueueTransaction) As Message
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
- transaction
- MessageQueueTransaction
Het MessageQueueTransaction-object.
Retouren
Een Message bericht dat verwijst naar een bericht in de wachtrij.
Uitzonderingen
De waarde die is opgegeven voor de parameter timeout is ongeldig. Is mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
Er is geen bericht binnengekomen in de wachtrij voordat de time-out is verlopen.
– of –
De wachtrij is niet-transactioneel.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Opmerkingen
Gebruik deze overbelasting om een bericht van een transactionele wachtrij te ontvangen met behulp van de interne transactiecontext die is gedefinieerd door de transaction parameter en binnen een opgegeven periode te retourneren als er geen berichten in de wachtrij staan.
Met Receive de methode kan een bericht synchroon worden gelezen, waardoor het uit de wachtrij wordt verwijderd. Volgende aanroepen om Receive de berichten te retourneren die volgen in de wachtrij.
Omdat deze methode wordt aangeroepen in een transactionele wachtrij, wordt het ontvangen bericht geretourneerd naar de wachtrij als de transactie is afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Als u een bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar Peek. Omdat Peek er geen berichten in de wachtrij worden verwijderd, is er niets om terug te draaien door een oproep naar Abort.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. De thread wordt geblokkeerd gedurende de opgegeven periode of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op een bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Receive(TimeSpan, Cursor, MessageQueueTransactionType)
Ontvangt het huidige bericht in de wachtrij met behulp van een opgegeven cursor. Als er geen bericht beschikbaar is, wacht deze methode totdat een bericht beschikbaar is of de time-out verloopt.
public:
System::Messaging::Message ^ Receive(TimeSpan timeout, System::Messaging::Cursor ^ cursor, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message Receive(TimeSpan timeout, System.Messaging.Cursor cursor, System.Messaging.MessageQueueTransactionType transactionType);
member this.Receive : TimeSpan * System.Messaging.Cursor * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function Receive (timeout As TimeSpan, cursor As Cursor, transactionType As MessageQueueTransactionType) As Message
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
- transactionType
- MessageQueueTransactionType
Een van de MessageQueueTransactionType waarden die het type transactiecontext beschrijft dat aan het bericht moet worden gekoppeld.
Retouren
Een Message bericht dat verwijst naar een bericht in de wachtrij.
Uitzonderingen
De cursor parameter is null.
De waarde die is opgegeven voor de parameter timeout is ongeldig. Is mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
De transactionType parameter is geen van de MessageQueueTransactionType leden.
Er is geen bericht binnengekomen in de wachtrij voordat de time-out is verlopen.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Opmerkingen
Gebruik deze overbelasting om een bericht van een wachtrij te ontvangen met behulp van een transactiecontext die is gedefinieerd door de transactionType parameter en in een opgegeven periode te retourneren als er geen berichten in de wachtrij staan.
Geef Automatic op voor de transactionType parameter als er al een externe transactiecontext is gekoppeld aan de thread die u wilt gebruiken om het bericht te ontvangen. Geef op Single of u het bericht wilt ontvangen als één interne transactie. U kunt opgeven None of u een bericht wilt ontvangen van een transactionele wachtrij buiten een transactiecontext.
Met Receive de methode kan een bericht synchroon worden gelezen, waardoor het uit de wachtrij wordt verwijderd. Volgende aanroepen om Receive de berichten te retourneren die volgen in de wachtrij.
Als deze methode wordt aangeroepen om een bericht te ontvangen van een transactionele wachtrij, wordt het ontvangen bericht geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Als u een bericht in een wachtrij wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de Peek methode. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar Peek. Omdat Peek er geen berichten in de wachtrij worden verwijderd, is er niets om terug te draaien door een oproep naar Abort.
Gebruik een aanroep om Receive te controleren wanneer de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. De thread wordt geblokkeerd gedurende de opgegeven periode of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven. Als de verwerking van de toepassing moet worden voortgezet zonder te wachten op een bericht, kunt u overwegen de asynchrone methode te gebruiken. BeginReceive
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
Veiligheid thread
De methode is niet thread safe.