MessageQueue.Peek Methode

Definitie

Retourneert een kopie van het eerste bericht in de wachtrij zonder het bericht uit de wachtrij te verwijderen.

Overloads

Name Description
Peek()

Retourneert zonder het eerste bericht in de wachtrij waarnaar wordt verwezen MessageQueuete verwijderen (een korte weergave). De Peek() methode is synchroon, dus blokkeert deze de huidige thread totdat er een bericht beschikbaar is.

Peek(TimeSpan)

Retourneert zonder het eerste bericht in de wachtrij waarnaar wordt verwezen MessageQueuete verwijderen (een korte weergave). De Peek() methode is synchroon, dus blokkeert deze de huidige thread totdat een bericht beschikbaar is of de opgegeven time-out optreedt.

Peek(TimeSpan, Cursor, PeekAction)

Retourneert zonder het huidige of volgende bericht in de wachtrij te verwijderen (korte weergaven), met behulp van de opgegeven cursor. De Peek() methode is synchroon, dus blokkeert deze de huidige thread totdat een bericht beschikbaar is of de opgegeven time-out optreedt.

Peek()

Retourneert zonder het eerste bericht in de wachtrij waarnaar wordt verwezen MessageQueuete verwijderen (een korte weergave). De Peek() methode is synchroon, dus blokkeert deze de huidige thread totdat er een bericht beschikbaar is.

public:
 System::Messaging::Message ^ Peek();
public System.Messaging.Message Peek();
member this.Peek : unit -> System.Messaging.Message
Public Function Peek () As Message

Retouren

Het Message bericht dat het eerste bericht in de wachtrij vertegenwoordigt.

Uitzonderingen

Er is een fout opgetreden bij het openen van een Message Queuing-methode.

Voorbeelden

In de volgende voorbeelden wordt de Peek methode in een wachtrij gebruikt.

In het eerste voorbeeld wacht de toepassing totdat een bericht beschikbaar is in de wachtrij. Houd er rekening mee dat het eerste voorbeeld geen toegang heeft tot het bericht dat binnenkomt; de verwerking wordt alleen onderbroken totdat een bericht binnenkomt. Als er al een bericht in de wachtrij bestaat, wordt het onmiddellijk geretourneerd.

In het tweede voorbeeld wordt een bericht met een door de toepassing gedefinieerde Order klasse verzonden naar de wachtrij en vervolgens een korte weergave van de wachtrij.

#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:

   //*************************************************
   // Posts a notification when a message arrives in 
   // the queue S"monitoredQueue". Does not retrieve any 
   // message information when peeking the message.
   //*************************************************
   void NotifyArrived()
   {
      // Connect to a queue.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\monitoredQueue" );

      // Specify to retrieve no message information.
      myQueue->MessageReadPropertyFilter->ClearAll();

      // Wait for a message to arrive. 
      Message^ emptyMessage = myQueue->Peek();

      // Post a notification when a message arrives.
      Console::WriteLine( "A message has arrived in the queue." );
      return;
   }


   //*************************************************
   // 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;
   }

   //*************************************************
   // Peeks a message containing an Order.
   //*************************************************
   void PeekFirstMessage()
   {
      // Connect to a queue.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );

      // Set the formatter to indicate the body contains an Order.
      array<Type^>^p = gcnew array<Type^>(1);
      p[ 0 ] = Order::typeid;
      myQueue->Formatter = gcnew XmlMessageFormatter( p );
      try
      {
         // Peek and format the message. 
         Message^ myMessage = myQueue->Peek();
         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 posts a notification that a message
// has arrived in a queue. It sends a message 
// containing an other to a separate queue, and then
// peeks the first message in the queue.
//*************************************************
int main()
{
   // Create a new instance of the class.
   MyNewQueue^ myNewQueue = gcnew MyNewQueue;

   // Wait for a message to arrive in the queue.
   myNewQueue->NotifyArrived();

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

   // Peek the first message in the queue.
   myNewQueue->PeekFirstMessage();
   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 posts a notification that a message
        // has arrived in a queue. It sends a message
        // containing an other to a separate queue, and then
        // peeks the first message in the queue.
        //**************************************************

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

            // Wait for a message to arrive in the queue.
            myNewQueue.NotifyArrived();

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

            // Peek the first message in the queue.
            myNewQueue.PeekFirstMessage();
                        
            return;
        }

        //**************************************************
        // Posts a notification when a message arrives in
        // the queue "monitoredQueue". Does not retrieve any
        // message information when peeking the message.
        //**************************************************
        
        public void NotifyArrived()
        {

            // Connect to a queue.
            MessageQueue myQueue = new
                MessageQueue(".\\monitoredQueue");
    
            // Specify to retrieve no message information.
            myQueue.MessageReadPropertyFilter.ClearAll();

            // Wait for a message to arrive.
            Message emptyMessage = myQueue.Peek();

            // Post a notification when a message arrives.
            Console.WriteLine("A message has arrived in the queue.");

            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;
        }

        //**************************************************
        // Peeks a message containing an Order.
        //**************************************************
        
        public void PeekFirstMessage()
        {
            // Connect to a queue.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");
    
            // Set the formatter to indicate the body contains an Order.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(MyProject.Order)});
            
            try
            {
                // Peek and format the message.
                Message myMessage =	myQueue.Peek();
                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 peeks 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 posts a notification that a message
        ' has arrived in a queue. It sends a message 
        ' containing an other to a separate queue, and then
        ' peeks the first message in the queue.
        

        Public Shared Sub Main()

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

            ' Wait for a message to arrive in the queue.
            myNewQueue.NotifyArrived()

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

            ' Peek the first message in the queue.
            myNewQueue.PeekFirstMessage()

            Return

        End Sub


        
        ' Posts a notification when a message arrives in 
        ' the queue "monitoredQueue". Does not retrieve any 
        ' message information when peeking the message.
        
        Public Sub NotifyArrived()

            ' Connect to a queue.
            Dim myQueue As New MessageQueue(".\monitoredQueue")

            ' Specify to retrieve no message information.
            myQueue.MessageReadPropertyFilter.ClearAll()

            ' Wait for a message to arrive. 
            Dim emptyMessage As Message = myQueue.Peek()

            ' Post a notification when a message arrives.
            Console.WriteLine("A message has arrived in the queue.")

            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


        
        ' Peeks a message containing an Order.
        

        Public Sub PeekFirstMessage()

            ' Connect to a queue.
            Dim myQueue As New MessageQueue(".\myQueue")

            ' Set the formatter to indicate body contains an Order.
            myQueue.Formatter = New XmlMessageFormatter(New Type() _
                {GetType(Order)})

            Try

                ' Peek and format the message. 
                Dim myMessage As Message = myQueue.Peek()
                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 wachtrij te bekijken of om te wachten tot er een bericht in de wachtrij voorkomt.

De Peek methode leest het eerste bericht uit de wachtrij, maar wordt niet verwijderd. Herhaalde aanroepen om Peek hetzelfde bericht te retourneren, tenzij er een bericht met een hogere prioriteit in de wachtrij binnenkomt. De Receive methode daarentegen leest en verwijdert het eerste bericht uit de wachtrij. Herhaalde aanroepen naar Receive, dus, retourneren verschillende berichten.

Message Queuing bestelt berichten in de wachtrij op basis van prioriteit en aankomsttijd. Een nieuwer bericht wordt alleen voor een oudere geplaatst als het een hogere prioriteit heeft.

Gebruik Peek deze functie wanneer het acceptabel is dat de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. Omdat deze overbelasting geen time-out opgeeft, kan de toepassing voor onbepaalde tijd wachten. Als u de verwerking van de toepassing nodig hebt om door te gaan zonder te wachten, gebruikt u de asynchrone BeginPeek methode. U kunt ook een time-out opgeven voor een bericht dat in de wachtrij terechtkomt met behulp van de overbelasting van Peek die een time-out.

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

Peek(TimeSpan)

Retourneert zonder het eerste bericht in de wachtrij waarnaar wordt verwezen MessageQueuete verwijderen (een korte weergave). De Peek() methode is synchroon, dus blokkeert deze de huidige thread totdat een bericht beschikbaar is of de opgegeven time-out optreedt.

public:
 System::Messaging::Message ^ Peek(TimeSpan timeout);
public System.Messaging.Message Peek(TimeSpan timeout);
member this.Peek : TimeSpan -> System.Messaging.Message
Public Function Peek (timeout As TimeSpan) As Message

Parameters

timeout
TimeSpan

A TimeSpan die aangeeft hoe lang moet worden gewacht totdat de wachtrij een bericht bevat.

Retouren

Het Message bericht dat het eerste bericht in de wachtrij vertegenwoordigt.

Uitzonderingen

De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.

Er is een fout opgetreden bij het openen van een Message Queuing-methode.

Voorbeelden

In het volgende codevoorbeeld wordt de Peek methode met een time-out van nul gebruikt om te controleren of de wachtrij leeg is.

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

using namespace System;
using namespace System::Messaging;
ref class MyNewQueue
{
public:

   //*************************************************
   // Determines whether a queue is empty. The Peek()
   // method throws an exception if there is no message
   // in the queue. This method handles that exception 
   // by returning true to the calling method.
   //*************************************************
   bool IsQueueEmpty()
   {
      bool isQueueEmpty = false;
      
      // Connect to a queue.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
      try
      {
         
         // Set Peek to return immediately.
         myQueue->Peek( TimeSpan(0) );
         
         // If an IOTime->Item[Out] was* not thrown, there is a message 
         // in the queue.
         isQueueEmpty = false;
      }
      catch ( MessageQueueException^ e ) 
      {
         if ( e->MessageQueueErrorCode == MessageQueueErrorCode::IOTimeout )
         {
            
            // No message was in the queue.
            isQueueEmpty = true;
         }

         
         // Handle other sources of MessageQueueException.
      }

      
      // Handle other exceptions as necessary.
      // Return true if there are no messages in the queue.
      return isQueueEmpty;
   }

};


//*************************************************
// Provides an entry point into the application.
//         
// This example determines whether a queue is empty.
//*************************************************
int main()
{
   
   // Create a new instance of the class.
   MyNewQueue^ myNewQueue = gcnew MyNewQueue;
   
   // Determine whether a queue is empty.
   bool isQueueEmpty = myNewQueue->IsQueueEmpty();
   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 determines whether a queue is empty.
        //**************************************************

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

            // Determine whether a queue is empty.
            bool isQueueEmpty = myNewQueue.IsQueueEmpty();
                        
            return;
        }

        //**************************************************
        // Determines whether a queue is empty. The Peek()
        // method throws an exception if there is no message
        // in the queue. This method handles that exception
        // by returning true to the calling method.
        //**************************************************
        
        public bool IsQueueEmpty()
        {
            bool isQueueEmpty = false;

            // Connect to a queue.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            try
            {
                // Set Peek to return immediately.
                myQueue.Peek(new TimeSpan(0));

                // If an IOTimeout was not thrown, there is a message
                // in the queue.
                isQueueEmpty = false;
            }

            catch(MessageQueueException e)
            {
                if (e.MessageQueueErrorCode ==
                    MessageQueueErrorCode.IOTimeout)
                {
                    // No message was in the queue.
                    isQueueEmpty = true;
                }

                // Handle other sources of MessageQueueException.
            }

            // Handle other exceptions as necessary.

            // Return true if there are no messages in the queue.
            return isQueueEmpty;
        }
    }
}
Imports System.Messaging



   
    Public Class MyNewQueue


        '
        ' Provides an entry point into the application.
        '		 
        ' This example determines whether a queue is empty.
        '

        Public Shared Sub Main()

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

            ' Determine whether a queue is empty.
            Dim IsQueueEmpty As Boolean = myNewQueue.IsQueueEmpty()
        if IsQueueEMpty=True Then Console.WriteLine("Empty")
            

            Return

        End Sub


        '
        ' Determines whether a queue is empty. The Peek()
        ' method throws an exception if there is no message
        ' in the queue. This method handles that exception 
        ' by returning true to the calling method.
        '

        Public Function IsQueueEmpty() As Boolean

            'Dim QueueEmpty As Boolean = False

            ' Connect to a queue.
            Dim myQueue As New MessageQueue(".\myQueue")

            Try

                ' Set Peek to return immediately.
                myQueue.Peek(New TimeSpan(0))

                ' If an IOTimeout was not thrown, there is a message 
                ' in the queue.
                'queueEmpty = False

            Catch e As MessageQueueException

                If e.MessageQueueErrorCode = _
                    MessageQueueErrorCode.IOTimeout Then

                    ' No message was in the queue.
                    IsQueueEmpty = True

                End If

                ' Handle other sources of MessageQueueException as necessary.

                ' Handle other exceptions as necessary.

            End Try

            ' Return true if there are no messages in the queue.
            'Return queueEmpty
        IsQueueEmpty = False

        End Function 'IsQueueEmpty 

End Class

Opmerkingen

Gebruik deze overbelasting om een wachtrij te bekijken of om een opgegeven periode te wachten totdat een bericht in de wachtrij voorkomt. De methode retourneert onmiddellijk als er al een bericht in de wachtrij bestaat.

De Peek methode leest het eerste bericht uit de wachtrij, maar wordt niet verwijderd. Herhaalde aanroepen om Peek hetzelfde bericht te retourneren, tenzij er een bericht met een hogere prioriteit in de wachtrij binnenkomt. De Receive methode daarentegen leest en verwijdert het eerste bericht uit de wachtrij. Herhaalde aanroepen naar Receive, dus, retourneren verschillende berichten.

Message Queuing bestelt berichten in de wachtrij op basis van prioriteit en aankomsttijd. Een nieuwer bericht wordt alleen voor een oudere geplaatst als het een hogere prioriteit heeft.

Gebruik Peek deze functie wanneer het acceptabel is dat de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. De thread wordt geblokkeerd tot de opgegeven periode of voor onbepaalde tijd als u hebt aangegeven InfiniteTimeout. Als u de verwerking van de toepassing nodig hebt om door te gaan zonder te wachten, gebruikt u de asynchrone BeginPeek methode.

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

Peek(TimeSpan, Cursor, PeekAction)

Retourneert zonder het huidige of volgende bericht in de wachtrij te verwijderen (korte weergaven), met behulp van de opgegeven cursor. De Peek() methode is synchroon, dus blokkeert deze de huidige thread totdat een bericht beschikbaar is of de opgegeven time-out optreedt.

public:
 System::Messaging::Message ^ Peek(TimeSpan timeout, System::Messaging::Cursor ^ cursor, System::Messaging::PeekAction action);
public System.Messaging.Message Peek(TimeSpan timeout, System.Messaging.Cursor cursor, System.Messaging.PeekAction action);
member this.Peek : TimeSpan * System.Messaging.Cursor * System.Messaging.PeekAction -> System.Messaging.Message
Public Function Peek (timeout As TimeSpan, cursor As Cursor, action As PeekAction) As Message

Parameters

timeout
TimeSpan

A TimeSpan die aangeeft hoe lang moet worden gewacht totdat de wachtrij een bericht bevat.

cursor
Cursor

Een Cursor die een specifieke positie in de berichtenwachtrij onderhoudt.

action
PeekAction

Een van de PeekAction waarden. Hiermee wordt aangegeven of u het huidige bericht in de wachtrij of het volgende bericht wilt bekijken.

Retouren

Een Message bericht in de wachtrij.

Uitzonderingen

Een andere waarde dan PeekAction.Current of PeekAction.Next is opgegeven voor de action parameter.

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.

Er is een fout opgetreden bij het openen van een Message Queuing-methode.

Opmerkingen

Gebruik deze overbelasting om een wachtrij te bekijken of om een opgegeven periode te wachten totdat een bericht in de wachtrij voorkomt. De methode retourneert onmiddellijk als er al een bericht in de wachtrij bestaat.

De Peek methode leest, maar verwijdert geen bericht uit de wachtrij. De Receive methode daarentegen leest en verwijdert een bericht uit de wachtrij.

Gebruik Peek deze functie wanneer het acceptabel is dat de huidige thread wordt geblokkeerd terwijl er wordt gewacht tot een bericht in de wachtrij aankomt. De thread wordt geblokkeerd tot de opgegeven periode of voor onbepaalde tijd als u hebt aangegeven InfiniteTimeout. Als u de verwerking van de toepassing nodig hebt om door te gaan zonder te wachten, gebruikt u de asynchrone BeginPeek methode.

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.