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.ReceiveByCorrelationId (String, MessageQueueTransaction)

 

Data di pubblicazione: novembre 2016

Riceve il messaggio che corrisponde all'identificatore di correlazione specificato (da una coda transazionale) e genera subito un'eccezione se nella coda è attualmente disponibile alcun messaggio con l'identificatore di correlazione specificato.

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

public Message ReceiveByCorrelationId(
	string correlationId,
	MessageQueueTransaction transaction
)

Parametri

correlationId
Type: System.String

Il CorrelationId del messaggio da ricevere.

transaction
Type: System.Messaging.MessageQueueTransaction

Oggetto MessageQueueTransaction.

Valore restituito

Type: System.Messaging.Message

Il Message cui CorrelationId corrisponde il correlationId passato nel parametro.

Exception Condition
ArgumentNullException

Il valore del parametro correlationId è null.

-oppure-

Il valore del parametro transaction è null.

InvalidOperationException

Il messaggio con l'oggetto specificato correlationId non è stato trovato.

MessageQueueException

La coda è transazionale.

-oppure-

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

Questo metodo esegue la ricerca nella coda transazionale a cui fa riferimento il MessageQueue per un messaggio il cui CorrelationId corrisponde al valore specificato correlationId parametro. Se non viene trovato alcun messaggio corrispondente la correlationID parametro, viene generata un'eccezione. In caso contrario, il messaggio viene rimosso dalla coda e restituito all'applicazione utilizzando il contesto di transazione interna definito dal transaction parametro.

Poiché questo metodo viene chiamato su 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.

Il CorrelationId proprietà viene utilizzata per collegare un messaggio inviato alla coda di messaggi di risposta, report o riconoscimento associati.

Altri due metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio della coda e ReceiveById(String) metodo viene utilizzato per recuperare un messaggio specificando il relativo identificatore univoco.

Per leggere un messaggio con un identificatore di correlazione specificato senza rimuoverlo dalla coda, utilizzare il PeekByCorrelationId(String) metodo. Il PeekByCorrelationId(String) 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 PeekByCorrelationId(String). Poiché PeekByCorrelationId(String) non rimuove alcun messaggio nella coda, non vi sarà nulla di cui eseguire il rollback se la transazione viene interrotta.

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

L'esempio di codice seguente illustra l'uso di ReceiveByCorrelationId(String, MessageQueueTransaction).


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

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

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

// Get the message's Id property value.
string id = msg.Id;

// Receive the message from the nontransactional queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0));

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

// Create a new message in response to the original message.
Message responseMsg = new Message("Example Response Message Body");

// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg.CorrelationId = id;

// Send the response message to the transactional queue.
transQueue.Send(responseMsg, "Example Response Message Label",
    MessageQueueTransactionType.Single);

// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));

// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue.MessageReadPropertyFilter.CorrelationId = true;

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

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

    // Receive the response message from the transactional queue.
    responseMsg = transQueue.ReceiveByCorrelationId(id, 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();
}

// Display the response message's property values.
Console.WriteLine("Message.Label: {0}", responseMsg.Label);
Console.WriteLine("Message.CorrelationId: {0}",
    responseMsg.CorrelationId);

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: