MessageQueue.ReceiveById Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Riceve il messaggio corrispondente all'identificatore specificato, rimuovendolo dalla coda.
Overload
| Nome | Descrizione |
|---|---|
| ReceiveById(String) |
Riceve il messaggio che corrisponde all'identificatore specificato da una coda non transazionale e genera immediatamente un'eccezione se nella coda non esiste alcun messaggio con l'identificatore specificato. |
| ReceiveById(String, MessageQueueTransaction) |
Riceve il messaggio che corrisponde all'identificatore specificato (da una coda transazionale) e genera immediatamente un'eccezione se nella coda non esiste alcun messaggio con l'identificatore specificato. |
| ReceiveById(String, MessageQueueTransactionType) |
Riceve il messaggio che corrisponde all'identificatore specificato e genera immediatamente un'eccezione se nella coda non esiste alcun messaggio con l'identificatore specificato. |
| ReceiveById(String, TimeSpan) |
Riceve il messaggio che corrisponde all'identificatore specificato (da una coda non transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che scada il timeout. |
| ReceiveById(String, TimeSpan, MessageQueueTransaction) |
Riceve il messaggio che corrisponde all'identificatore specificato (da una coda transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che scada il timeout. |
| ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
Riceve il messaggio che corrisponde all'identificatore specificato e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che scada il timeout. |
ReceiveById(String)
Riceve il messaggio che corrisponde all'identificatore specificato da una coda non transazionale e genera immediatamente un'eccezione se nella coda non esiste alcun messaggio con l'identificatore specificato.
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id);
public System.Messaging.Message ReceiveById(string id);
member this.ReceiveById : string -> System.Messaging.Message
Public Function ReceiveById (id As String) As Message
Parametri
Restituisce
Oggetto Message la cui Id proprietà corrisponde al id parametro passato.
Eccezioni
Il id parametro è null.
Impossibile trovare il messaggio con l'oggetto specificato id .
Si è verificato un errore durante l'accesso a un metodo di accodamento messaggi.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso di ReceiveById(String).
// Connect to a queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Receive the message from the queue.
msg = queue->ReceiveById(id);
queue->Close();
// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Receive the message from the queue.
msg = queue.ReceiveById(id);
Commenti
Usare questo metodo per leggere un messaggio con un identificatore noto e rimuoverlo dalla coda. Questo metodo genera immediatamente un'eccezione se il messaggio non si trova nella coda.
La Id proprietà di un messaggio è univoca nell'organizzazione di Accodamento messaggi, pertanto nella coda sarà presente al massimo un messaggio che corrisponde al parametro specificato id .
Altri due metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio nella coda e il ReceiveByCorrelationId(String) metodo viene utilizzato per recuperare un messaggio di conferma, report o messaggio di risposta generato dall'applicazione creato come risultato di un messaggio inviato alla coda.
Per leggere un messaggio con un identificatore specificato senza rimuoverlo dalla coda, usare il PeekById(String) metodo . Il PeekById(String) metodo restituisce sempre il primo messaggio nella coda, quindi le chiamate successive al metodo restituiscono lo stesso messaggio, a meno che non arrivi un messaggio con priorità più alta nella coda.
Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.
| Modalità gruppo di lavoro | Disponibile |
|---|---|
| Computer locale | Sì |
| Computer locale e nome del formato diretto | Sì |
| Computer remoto | No |
| Computer remoto e nome del formato diretto | Sì |
Vedi anche
Si applica a
ReceiveById(String, MessageQueueTransaction)
Riceve il messaggio che corrisponde all'identificatore specificato (da una coda transazionale) e genera immediatamente un'eccezione se nella coda non esiste alcun messaggio con l'identificatore specificato.
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message ReceiveById(string id, System.Messaging.MessageQueueTransaction transaction);
member this.ReceiveById : string * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function ReceiveById (id As String, transaction As MessageQueueTransaction) As Message
Parametri
- transaction
- MessageQueueTransaction
Oggetto MessageQueueTransaction.
Restituisce
Oggetto Message la cui Id proprietà corrisponde al id parametro passato.
Eccezioni
Impossibile trovare il messaggio con l'oggetto specificato id .
La coda non è transazionale.
oppure
Si è verificato un errore durante l'accesso a un metodo di accodamento messaggi.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso di ReceiveById(String, MessageQueueTransaction).
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();
try
{
// Begin a transaction.
transaction->Begin();
// Receive the message from the queue.
msg = queue->ReceiveById(id, transaction);
// Commit the transaction.
transaction->Commit();
}
catch (Exception^ ex)
{
// Cancel the transaction.
transaction->Abort();
// Propagate the exception.
throw ex;
}
finally
{
// Dispose of the transaction object.
delete transaction;
queue->Close();
}
// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();
try
{
// Begin a transaction.
transaction.Begin();
// Receive the message from the queue.
msg = queue.ReceiveById(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();
}
Commenti
Utilizzare questo metodo per leggere un messaggio con un identificatore noto e rimuoverlo dalla coda, usando il contesto di transazione interno definito dal transaction parametro . Questo metodo genera immediatamente un'eccezione se il messaggio non si trova nella coda
La Id proprietà di un messaggio è univoca nell'organizzazione di Accodamento messaggi, pertanto nella coda sarà presente al massimo un messaggio che corrisponde al parametro specificato id .
Poiché questo metodo viene chiamato in una coda transazionale, il messaggio ricevuto verrà restituito alla coda se la transazione viene interrotta. Il messaggio non viene rimosso definitivamente dalla coda finché non viene eseguito il commit della transazione.
Altri due metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio nella coda e il ReceiveByCorrelationId(String) metodo viene utilizzato per recuperare un messaggio di conferma, report o messaggio di risposta generato dall'applicazione creato come risultato di un messaggio inviato alla coda.
Per leggere un messaggio con un identificatore specificato senza rimuoverlo dalla coda, usare il PeekById(String) metodo . Il PeekById(String) metodo restituisce sempre il primo messaggio nella coda, quindi le chiamate successive al metodo restituiscono lo stesso messaggio, a meno che non arrivi un messaggio con priorità più alta nella coda. Nessun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non sarebbe necessario eseguire il rollback se la transazione fosse stata interrotta.
Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.
| Modalità gruppo di lavoro | Disponibile |
|---|---|
| Computer locale | Sì |
| Computer locale e nome del formato diretto | Sì |
| Computer remoto | No |
| Computer remoto e nome del formato diretto | Sì |
Vedi anche
Si applica a
ReceiveById(String, MessageQueueTransactionType)
Riceve il messaggio che corrisponde all'identificatore specificato e genera immediatamente un'eccezione se nella coda non esiste alcun messaggio con l'identificatore specificato.
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message ReceiveById(string id, System.Messaging.MessageQueueTransactionType transactionType);
member this.ReceiveById : string * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function ReceiveById (id As String, transactionType As MessageQueueTransactionType) As Message
Parametri
- transactionType
- MessageQueueTransactionType
Uno dei MessageQueueTransactionType valori, che descrive il tipo di contesto della transazione da associare al messaggio.
Restituisce
Oggetto Message la cui Id proprietà corrisponde al id parametro passato.
Eccezioni
Il id parametro è null.
Impossibile trovare il messaggio con l'oggetto specificato id .
Il transactionType parametro non è uno dei MessageQueueTransactionType membri.
Si è verificato un errore durante l'accesso a un metodo di accodamento messaggi.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso di ReceiveById(String, MessageQueueTransactionType).
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Receive the message from the queue.
msg = queue->ReceiveById(id, MessageQueueTransactionType::Single);
queue->Close();
// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Receive the message from the queue.
msg = queue.ReceiveById(id, MessageQueueTransactionType.Single);
Commenti
Usare questo metodo per leggere un messaggio con un identificatore noto e rimuoverlo dalla coda. Questo metodo genera immediatamente un'eccezione se il messaggio non si trova nella coda. In caso contrario, il messaggio viene rimosso dalla coda e restituito all'applicazione usando un contesto di transazione definito dal transactionType parametro .
Specificare Automatic per il transactionType parametro se è già presente un contesto di transazione esterno collegato al thread che si vuole usare 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 all'esterno di un contesto di transazione.
La Id proprietà di un messaggio è univoca nell'organizzazione di Accodamento messaggi, pertanto nella coda sarà presente al massimo un messaggio che corrisponde al parametro specificato id . Se il messaggio con l'identificatore specificato si trova in una coda diversa da quella associata a questa MessageQueue istanza, il messaggio non verrà trovato.
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 viene rimosso definitivamente dalla coda finché non viene eseguito il commit della transazione.
Altri due metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio nella coda e il ReceiveByCorrelationId(String) metodo viene utilizzato per recuperare un messaggio di conferma, report o messaggio di risposta generato dall'applicazione creato come risultato di un messaggio inviato alla coda.
Per leggere un messaggio con un identificatore specificato senza rimuoverlo dalla coda, usare il PeekById(String) metodo . Il PeekById(String) metodo restituisce sempre il primo messaggio nella coda, quindi le chiamate successive al metodo restituiscono lo stesso messaggio, a meno che non arrivi un messaggio con priorità più alta nella coda. Nessun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non sarebbe necessario eseguire il rollback se la transazione fosse stata interrotta.
Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.
| Modalità gruppo di lavoro | Disponibile |
|---|---|
| Computer locale | Sì |
| Computer locale e nome del formato diretto | Sì |
| Computer remoto | No |
| Computer remoto e nome del formato diretto | Sì |
Vedi anche
Si applica a
ReceiveById(String, TimeSpan)
Riceve il messaggio che corrisponde all'identificatore specificato (da una coda non transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che scada il timeout.
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, TimeSpan timeout);
public System.Messaging.Message ReceiveById(string id, TimeSpan timeout);
member this.ReceiveById : string * TimeSpan -> System.Messaging.Message
Public Function ReceiveById (id As String, timeout As TimeSpan) As Message
Parametri
- timeout
- TimeSpan
Oggetto TimeSpan che indica il tempo di attesa fino a quando non è disponibile un nuovo messaggio per l'ispezione.
Restituisce
Oggetto Message la cui Id proprietà corrisponde al id parametro passato.
Eccezioni
Il id parametro è null.
Il valore specificato per il timeout parametro non è valido, possibilmente timeout è minore Zero o maggiore di InfiniteTimeout.
Un messaggio con l'oggetto specificato id non è arrivato nella coda prima della scadenza del timeout.
oppure
Si è verificato un errore durante l'accesso a un metodo di accodamento messaggi.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso di ReceiveById(String, TimeSpan).
// Connect to a queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0));
queue->Close();
// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0));
Commenti
Usare questo metodo per leggere un messaggio con un identificatore noto e rimuoverlo dalla coda. Questo metodo restituisce immediatamente se il messaggio con l'identificatore specificato dal id parametro si trova nella coda. In caso contrario, il metodo attende l'arrivo di un nuovo messaggio nel periodo di tempo specificato. Se non arriva un nuovo messaggio prima della scadenza del timeout, viene generata un'eccezione.
Il timeout parametro non specifica il tempo di esecuzione totale per questo metodo. Specifica invece il tempo di attesa per l'arrivo di un nuovo messaggio nella coda. Ogni volta che arriva un nuovo messaggio, questo metodo esamina il Id del nuovo messaggio per verificare se corrisponde al id parametro . In caso contrario, questo metodo avvia il periodo di timeout e attende l'arrivo di un altro nuovo messaggio. Pertanto, se i nuovi messaggi continuano ad arrivare entro il periodo di timeout, è possibile che questo metodo continui a essere in esecuzione a tempo indeterminato, fino alla scadenza del periodo di timeout senza nuovi messaggi in arrivo o fino all'arrivo di un messaggio il cui Id corrisponde al id parametro .
La Id proprietà di un messaggio è univoca nell'organizzazione di Accodamento messaggi, pertanto nella coda sarà presente al massimo un messaggio che corrisponde al parametro specificato id .
Usare questo overload di ReceiveById(String) quando è accettabile che il thread corrente venga bloccato, purché i nuovi messaggi continuino ad arrivare nella coda entro il periodo di timeout specificato dal timeout parametro . Il thread verrà bloccato per almeno il periodo di tempo specificato o per un periodo illimitato se è stato specificato il valore InfiniteTimeout per il timeout parametro oppure se i nuovi messaggi continuano ad arrivare nella coda entro il periodo di timeout specificato dal timeout parametro .
Altri due metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio nella coda e il ReceiveByCorrelationId(String) metodo viene utilizzato per recuperare un messaggio di conferma, report o messaggio di risposta generato dall'applicazione creato come risultato di un messaggio inviato alla coda.
Per leggere un messaggio con un identificatore specificato senza rimuoverlo dalla coda, usare il PeekById(String) metodo . Il PeekById(String) metodo restituisce sempre il primo messaggio nella coda, quindi le chiamate successive al metodo restituiscono lo stesso messaggio, a meno che non arrivi un messaggio con priorità più alta nella coda.
Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.
| Modalità gruppo di lavoro | Disponibile |
|---|---|
| Computer locale | Sì |
| Computer locale e nome del formato diretto | Sì |
| Computer remoto | No |
| Computer remoto e nome del formato diretto | Sì |
Vedi anche
Si applica a
ReceiveById(String, TimeSpan, MessageQueueTransaction)
Riceve il messaggio che corrisponde all'identificatore specificato (da una coda transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che scada il timeout.
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, TimeSpan timeout, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message ReceiveById(string id, TimeSpan timeout, System.Messaging.MessageQueueTransaction transaction);
member this.ReceiveById : string * TimeSpan * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function ReceiveById (id As String, timeout As TimeSpan, transaction As MessageQueueTransaction) As Message
Parametri
- timeout
- TimeSpan
Oggetto TimeSpan che indica il tempo di attesa fino a quando non è disponibile un nuovo messaggio per l'ispezione.
- transaction
- MessageQueueTransaction
Oggetto MessageQueueTransaction.
Restituisce
Oggetto Message la cui Id proprietà corrisponde al id parametro passato.
Eccezioni
Il valore specificato per il timeout parametro non è valido, possibilmente timeout è minore Zero o maggiore di InfiniteTimeout.
Un messaggio con l'oggetto specificato id non è arrivato nella coda prima della scadenza del timeout.
oppure
La coda non è transazionale.
oppure
Si è verificato un errore durante l'accesso a un metodo di accodamento messaggi.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso di ReceiveById(String, TimeSpan, MessageQueueTransaction).
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();
try
{
// Begin a transaction.
transaction->Begin();
// Receive the message from the queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0),
transaction);
// Commit the transaction.
transaction->Commit();
}
catch (Exception^ ex)
{
// Cancel the transaction.
transaction->Abort();
// Propagate the exception.
throw ex;
}
finally
{
// Dispose of the transaction object.
delete transaction;
queue->Close();
}
// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();
try
{
// Begin a transaction.
transaction.Begin();
// Receive the message from the queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0),
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();
}
Commenti
Utilizzare questo metodo per leggere un messaggio con un identificatore noto e rimuoverlo dalla coda, usando il contesto di transazione interno definito dal transaction parametro . Questo metodo restituisce immediatamente se il messaggio con l'identificatore specificato dal id parametro si trova nella coda. In caso contrario, il metodo attende l'arrivo di un nuovo messaggio nel periodo di tempo specificato. Se non arriva un nuovo messaggio prima della scadenza del timeout, viene generata un'eccezione.
Il timeout parametro non specifica il tempo di esecuzione totale per questo metodo. Specifica invece il tempo di attesa per l'arrivo di un nuovo messaggio nella coda. Ogni volta che arriva un nuovo messaggio, questo metodo esamina il Id del nuovo messaggio per verificare se corrisponde al id parametro . In caso contrario, questo metodo avvia il periodo di timeout e attende l'arrivo di un altro nuovo messaggio. Pertanto, se i nuovi messaggi continuano ad arrivare entro il periodo di timeout, è possibile che questo metodo continui a essere in esecuzione a tempo indeterminato, fino alla scadenza del periodo di timeout senza nuovi messaggi in arrivo o fino all'arrivo di un messaggio il cui Id corrisponde al id parametro .
La Id proprietà di un messaggio è univoca nell'organizzazione di Accodamento messaggi, pertanto nella coda sarà presente al massimo un messaggio che corrisponde al parametro specificato id .
Usare questo overload di ReceiveById(String) quando è accettabile che il thread corrente venga bloccato, purché i nuovi messaggi continuino ad arrivare nella coda entro il periodo di timeout specificato dal timeout parametro . Il thread verrà bloccato per almeno il periodo di tempo specificato o per un periodo illimitato se è stato specificato il valore InfiniteTimeout per il timeout parametro oppure se i nuovi messaggi continuano ad arrivare nella coda entro il periodo di timeout specificato dal timeout parametro .
Poiché questo metodo viene chiamato in una coda transazionale, il messaggio ricevuto verrà restituito alla coda se la transazione viene interrotta. Il messaggio non viene rimosso definitivamente dalla coda finché non viene eseguito il commit della transazione.
Altri due metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio nella coda e il ReceiveByCorrelationId(String) metodo viene utilizzato per recuperare un messaggio di conferma, report o messaggio di risposta generato dall'applicazione creato come risultato di un messaggio inviato alla coda.
Per leggere un messaggio con un identificatore specificato senza rimuoverlo dalla coda, usare il PeekById(String) metodo . Il PeekById(String) metodo restituisce sempre il primo messaggio nella coda, quindi le chiamate successive al metodo restituiscono lo stesso messaggio, a meno che non arrivi un messaggio con priorità più alta nella coda. Nessun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non sarebbe necessario eseguire il rollback se la transazione fosse stata interrotta.
Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.
| Modalità gruppo di lavoro | Disponibile |
|---|---|
| Computer locale | Sì |
| Computer locale e nome del formato diretto | Sì |
| Computer remoto | No |
| Computer remoto e nome del formato diretto | Sì |
Vedi anche
Si applica a
ReceiveById(String, TimeSpan, MessageQueueTransactionType)
Riceve il messaggio che corrisponde all'identificatore specificato e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che scada il timeout.
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, TimeSpan timeout, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message ReceiveById(string id, TimeSpan timeout, System.Messaging.MessageQueueTransactionType transactionType);
member this.ReceiveById : string * TimeSpan * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function ReceiveById (id As String, timeout As TimeSpan, transactionType As MessageQueueTransactionType) As Message
Parametri
- timeout
- TimeSpan
Oggetto TimeSpan che indica il tempo di attesa fino a quando non è disponibile un nuovo messaggio per l'ispezione.
- transactionType
- MessageQueueTransactionType
Uno dei MessageQueueTransactionType valori, che descrive il tipo di contesto della transazione da associare al messaggio.
Restituisce
Oggetto Message la cui Id proprietà corrisponde al id parametro passato.
Eccezioni
Il id parametro è null.
Il valore specificato per il timeout parametro non è valido, possibilmente timeout è minore Zero o maggiore di InfiniteTimeout.
Un messaggio con l'oggetto specificato id non è arrivato nella coda prima della scadenza del timeout.
oppure
Si è verificato un errore durante l'accesso a un metodo di accodamento messaggi.
Il transactionType parametro non è uno dei MessageQueueTransactionType membri.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso di ReceiveById(String, TimeSpan, MessageQueueTransactionType).
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the queue.
msg = queue->ReceiveById(id, 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, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0),
MessageQueueTransactionType.Single);
Commenti
Usare questo metodo per leggere un messaggio con un identificatore noto e rimuoverlo dalla coda. Questo metodo restituisce immediatamente se il messaggio con l'identificatore specificato dal id parametro si trova nella coda, usando un contesto di transazione definito dal transactionType parametro . In caso contrario, il metodo attende l'arrivo di un nuovo messaggio nel periodo di tempo specificato. Se non arriva un nuovo messaggio prima della scadenza del timeout, viene generata un'eccezione.
Il timeout parametro non specifica il tempo di esecuzione totale per questo metodo. Specifica invece il tempo di attesa per l'arrivo di un nuovo messaggio nella coda. Ogni volta che arriva un nuovo messaggio, questo metodo esamina il Id del nuovo messaggio per verificare se corrisponde al id parametro . In caso contrario, questo metodo avvia il periodo di timeout e attende l'arrivo di un altro nuovo messaggio. Pertanto, se i nuovi messaggi continuano ad arrivare entro il periodo di timeout, è possibile che questo metodo continui a essere in esecuzione a tempo indeterminato, fino alla scadenza del periodo di timeout senza nuovi messaggi in arrivo o fino all'arrivo di un messaggio il cui Id corrisponde al id parametro .
Specificare Automatic per il transactionType parametro se è già presente un contesto di transazione esterno collegato al thread che si vuole usare 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 all'esterno di un contesto di transazione.
La Id proprietà di un messaggio è univoca nell'organizzazione di Accodamento messaggi, pertanto nella coda sarà presente al massimo un messaggio che corrisponde al parametro specificato id . Se il messaggio con l'identificatore specificato si trova in una coda diversa da quella associata a questa MessageQueue istanza, il messaggio non verrà trovato.
Usare questo overload di ReceiveById(String) quando è accettabile che il thread corrente venga bloccato, purché i nuovi messaggi continuino ad arrivare nella coda entro il periodo di timeout specificato dal timeout parametro . Il thread verrà bloccato per almeno il periodo di tempo specificato o per un periodo illimitato se è stato specificato il valore InfiniteTimeout per il timeout parametro oppure se i nuovi messaggi continuano ad arrivare nella coda entro il periodo di timeout specificato dal timeout parametro .
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 viene rimosso definitivamente dalla coda finché non viene eseguito il commit della transazione.
Altri due metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio nella coda e il ReceiveByCorrelationId(String) metodo viene utilizzato per recuperare un messaggio di conferma, report o messaggio di risposta generato dall'applicazione creato come risultato di un messaggio inviato alla coda.
Per leggere un messaggio con un identificatore specificato senza rimuoverlo dalla coda, usare il PeekById(String) metodo . Il PeekById(String) metodo restituisce sempre il primo messaggio nella coda, quindi le chiamate successive al metodo restituiscono lo stesso messaggio, a meno che non arrivi un messaggio con priorità più alta nella coda. Nessun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non sarebbe necessario eseguire il rollback se la transazione fosse stata interrotta.
Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.
| Modalità gruppo di lavoro | Disponibile |
|---|---|
| Computer locale | Sì |
| Computer locale e nome del formato diretto | Sì |
| Computer remoto | No |
| Computer remoto e nome del formato diretto | Sì |