Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo MessageQueue.Receive (TimeSpan, MessageQueueTransactionType)

 

Data di pubblicazione: ottobre 2016

Riceve il primo messaggio disponibile nella coda a cui fa riferimento il MessageQueue. Questa chiamata è sincrona e attende che un messaggio è disponibile nella coda o alla scadenza del timeout.

Spazio dei nomi:   System.Messaging
Assembly:  System.Messaging (in System.Messaging.dll)

public Message Receive(
	TimeSpan timeout,
	MessageQueueTransactionType transactionType
)

Parametri

timeout
Type: System.TimeSpan

Oggetto TimeSpan che indica il tempo di attesa fino a quando un messaggio nuovo è disponibile per l'ispezione.

transactionType
Type: System.Messaging.MessageQueueTransactionType

Uno del MessageQueueTransactionType valori, che descrivono il tipo di contesto di transazione da associare al messaggio.

Valore restituito

Type: System.Messaging.Message

Oggetto Message che fa riferimento il primo messaggio disponibile nella coda.

Exception Condition
ArgumentException

Il valore specificato per il timeout parametro non valido, probabilmente timeout è minore di TimeSpan.Zero o maggiore di MessageQueue.InfiniteTimeout.

InvalidEnumArgumentException

Il transactionType parametro non è incluso il MessageQueueTransactionType membri.

MessageQueueException

Un messaggio non è arrivato nella coda prima della scadenza del timeout.

-oppure-

Si è verificato un errore quando si accede a un metodo di Accodamento messaggi.

.NET Framework
Disponibile da 1.1

Il metodo non è thread-safe.

Utilizzare questo overload per ricevere un messaggio da una coda utilizzando il contesto di transazione definito dal transactionType parametro e restituire in un determinato periodo di tempo se non sono presenti messaggi nella coda.

Specificare Automatic per il transactionType parametro se è già presente un contesto di transazione esterno associato al thread che si desidera utilizzare per ricevere il messaggio. Specificare Single Se si desidera ricevere il messaggio come singola transazione interna. È possibile specificare None Se si desidera ricevere un messaggio da una coda transazionale di fuori di un contesto di transazione.

Il Receive metodo consente la lettura sincrona di un messaggio, rimuovendolo dalla coda. Le chiamate successive a Receive verranno restituiti i messaggi successivi nella coda.

Se questo metodo viene chiamato per ricevere un messaggio da una coda transazionale, il messaggio ricevuto verrà restituito alla coda se la transazione viene interrotta. Il messaggio non verrà rimosso definitivamente dalla coda fino a quando non viene eseguito il commit della transazione.

Per leggere il primo messaggio in una coda senza rimuoverlo dalla coda, utilizzare il Peek metodo. Il Peek metodo restituisce sempre il primo messaggio della coda, le chiamate successive al metodo restituiscono lo stesso messaggio a meno che un messaggio con priorità più alta arriva nella coda. Nessun contesto di transazione associata a un messaggio restituito da una chiamata a Peek. Poiché Peek non rimuove alcun messaggio nella coda, non vi sarà nulla di cui eseguire il rollback mediante una chiamata a Abort.

Utilizzare una chiamata a Receive quando è accettabile per il thread corrente resti bloccato mentre è in attesa di un messaggio è arrivato nella coda. Il thread verrà bloccato per il periodo di tempo o in modo indefinito se è stato specificato il valore InfiniteTimeout per il timeout parametro. Se l'elaborazione dell'applicazione continui senza attendere un messaggio, è consigliabile utilizzare il metodo asincrono, BeginReceive.

Nella tabella seguente indica se questo metodo è disponibile in diverse modalità gruppo di lavoro.

Modalità gruppo di lavoro

Disponibile

Computer locale

Computer locale e il nome di formato direct

Computer remoto

No

Computer remoto e il nome di formato direct

Esempio di codice seguente viene illustrato l'utilizzo di questo metodo.


// 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);

Torna all'inizio
Mostra: