Condividi tramite


MessageQueue.ReceiveById Metodo

Definizione

Riceve il messaggio corrispondente all'identificatore specificato rimuovendolo dalla coda.

Overload

ReceiveById(String)

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

ReceiveById(String, MessageQueueTransaction)

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

ReceiveById(String, MessageQueueTransactionType)

Riceve il messaggio corrispondente all'identificatore specificato e genera subito un'eccezione se nella coda non è disponibile alcun messaggio con l'identificatore specificato.

ReceiveById(String, TimeSpan)

Riceve il messaggio corrispondente all'identificatore specificato (da una coda non transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che il timeout scada.

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Riceve il messaggio corrispondente all'identificatore specificato (da una coda transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che il timeout scada.

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 il timeout scada.

ReceiveById(String)

Riceve il messaggio che corrisponde all'identificatore specificato da una coda non transazionale e genera subito un'eccezione se nella coda non è disponibile 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

id
String

Oggetto Id del messaggio da ricevere.

Restituisce

Oggetto Message la cui proprietà Id corrisponde al parametro id passato.

Eccezioni

Il valore del parametro id è null.

Impossibile trovare il messaggio con il parametro id specificato.

Si è verificato un errore durante l'accesso a un metodo di Accodamento messaggi.

Esempio

L'esempio di codice seguente illustra 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 usato 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
Computer locale e nome del formato diretto
Computer remoto No
Nome del formato diretto e del computer remoto

Vedi anche

Si applica a

ReceiveById(String, MessageQueueTransaction)

Riceve il messaggio che corrisponde all'identificatore specificato (da una coda transazionale) e genera subito un'eccezione se nella coda non è disponibile 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

id
String

Oggetto Id del messaggio da ricevere.

Restituisce

Oggetto Message la cui proprietà Id corrisponde al parametro id passato.

Eccezioni

Il valore del parametro id è null.

-oppure-

Il valore del parametro transaction è null.

Impossibile trovare il messaggio con il parametro id specificato.

La coda non è transazionale.

-oppure-

Si è verificato un errore durante l'accesso a un metodo di Accodamento messaggi.

Esempio

L'esempio di codice seguente illustra 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

Usare 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 usato 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. Non esiste alcun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non è necessario eseguire il rollback se la transazione è stata interrotta.

Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.

Modalità gruppo di lavoro Disponibile
Computer locale
Computer locale e nome del formato diretto
Computer remoto No
Nome del formato diretto e del computer remoto

Vedi anche

Si applica a

ReceiveById(String, MessageQueueTransactionType)

Riceve il messaggio corrispondente all'identificatore specificato e genera subito un'eccezione se nella coda non è disponibile 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

id
String

Oggetto Id del messaggio da ricevere.

transactionType
MessageQueueTransactionType

Uno dei valori di MessageQueueTransactionType che descrive il tipo di contesto di transazione da associare al messaggio.

Restituisce

Oggetto Message la cui proprietà Id corrisponde al parametro id passato.

Eccezioni

Il valore del parametro id è null.

Impossibile trovare il messaggio con il parametro id specificato.

Il parametro transactionType non è uno dei membri di MessageQueueTransactionType.

Si è verificato un errore durante l'accesso a un metodo di Accodamento messaggi.

Esempio

L'esempio di codice seguente illustra 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 esterna 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 usato 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. Non esiste alcun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non è necessario eseguire il rollback se la transazione è stata interrotta.

Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.

Modalità gruppo di lavoro Disponibile
Computer locale
Computer locale e nome del formato diretto
Computer remoto No
Nome del formato diretto e del computer remoto

Vedi anche

Si applica a

ReceiveById(String, TimeSpan)

Riceve il messaggio corrispondente all'identificatore specificato (da una coda non transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che il timeout scada.

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

id
String

Oggetto Id del messaggio da ricevere.

timeout
TimeSpan

Oggetto TimeSpan che indica l'intervallo di attesa prima che un nuovo messaggio venga reso disponibile per il controllo.

Restituisce

Oggetto Message la cui proprietà Id corrisponde al parametro id passato.

Eccezioni

Il valore del parametro id è null.

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

Un messaggio con il parametro id specificato non è arrivato nella coda prima della scadenza del timeout.

-oppure-

Si è verificato un errore durante l'accesso a un metodo di Accodamento messaggi.

Esempio

L'esempio di codice seguente illustra 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 il periodo di tempo specificato per l'arrivo di un nuovo messaggio. Se un nuovo messaggio non arriva 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 per un periodo illimitato, fino alla scadenza del periodo di timeout senza nuovi messaggi in arrivo o fino a quando non arriva 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 usato 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
Computer locale e nome del formato diretto
Computer remoto No
Nome del formato diretto e del computer remoto

Vedi anche

Si applica a

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Riceve il messaggio corrispondente all'identificatore specificato (da una coda transazionale) e attende che un messaggio con l'identificatore specificato sia disponibile nella coda o che il timeout scada.

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

id
String

Oggetto Id del messaggio da ricevere.

timeout
TimeSpan

Oggetto TimeSpan che indica l'intervallo di attesa prima che un nuovo messaggio venga reso disponibile per il controllo.

Restituisce

Oggetto Message la cui proprietà Id corrisponde al parametro id passato.

Eccezioni

Il valore del parametro id è null.

-oppure-

Il valore del parametro transaction è null.

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

Un messaggio con il parametro id specificato 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

L'esempio di codice seguente illustra 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

Usare 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 il periodo di tempo specificato per l'arrivo di un nuovo messaggio. Se un nuovo messaggio non arriva 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 per un periodo illimitato, fino alla scadenza del periodo di timeout senza nuovi messaggi in arrivo o fino a quando non arriva 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 usato 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. Non esiste alcun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non è necessario eseguire il rollback se la transazione è stata interrotta.

Nella tabella seguente viene illustrato se questo metodo è disponibile in varie modalità gruppo di lavoro.

Modalità gruppo di lavoro Disponibile
Computer locale
Computer locale e nome del formato diretto
Computer remoto No
Nome del formato diretto e del computer remoto

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 il timeout scada.

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

id
String

Oggetto Id del messaggio da ricevere.

timeout
TimeSpan

Oggetto TimeSpan che indica l'intervallo di attesa prima che un nuovo messaggio venga reso disponibile per il controllo.

transactionType
MessageQueueTransactionType

Uno dei valori di MessageQueueTransactionType che descrive il tipo di contesto di transazione da associare al messaggio.

Restituisce

Oggetto Message la cui proprietà Id corrisponde al parametro id passato.

Eccezioni

Il valore del parametro id è null.

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

Un messaggio con il parametro id specificato non è arrivato nella coda prima della scadenza del timeout.

-oppure-

Si è verificato un errore durante l'accesso a un metodo di Accodamento messaggi.

Il parametro transactionType non è uno dei membri di MessageQueueTransactionType.

Esempio

L'esempio di codice seguente illustra 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 il periodo di tempo specificato per l'arrivo di un nuovo messaggio. Se un nuovo messaggio non arriva 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 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 eseguire in modo indefinito, fino alla scadenza del periodo di timeout senza alcun nuovo messaggio in arrivo o fino a quando un messaggio arriva 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 vuole ricevere il messaggio come singola transazione interna. È possibile specificare None se si vuole ricevere un messaggio da una coda transazionale all'esterno di un contesto di transazione.

La Id proprietà di un messaggio è univoca nell'organizzazione Accodamento messaggi, quindi verrà visualizzato al massimo un messaggio nella coda corrispondente 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 fino a quando i nuovi messaggi continuano 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 indefinito se è stato specificato il valore InfiniteTimeout per il timeouttimeout parametro oppure se i nuovi messaggi continuano ad arrivare nella coda entro il periodo di timeout specificato dal 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 fino al commit della transazione.

Due altri metodi consentono di ricevere messaggi da una coda. Il Receive metodo restituisce il primo messaggio nella coda e il ReceiveByCorrelationId(String) metodo viene usato per recuperare un messaggio di risposta riconosciuto, report o 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 di priorità superiore nella coda. Non esiste alcun contesto di transazione associato a un messaggio restituito da una chiamata a PeekById(String). Poiché PeekById(String) non rimuove alcun messaggio nella coda, non sarà necessario eseguire il rollback se la transazione è stata interrotta.

La tabella seguente mostra se questo metodo è disponibile in varie modalità gruppo di lavoro.

Modalità gruppo di lavoro Disponibile
Computer locale
Nome del computer locale e del formato diretto
Computer remoto No
Nome del formato diretto e del computer remoto

Vedi anche

Si applica a