MessageQueue.ReceiveById Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Recebe a mensagem que corresponde ao identificador indicado, removendo-a da fila.
Sobrecargas
| Name | Description |
|---|---|
| ReceiveById(String) |
Recebe a mensagem que corresponde ao identificador dado de uma fila não transacional e levanta imediatamente uma exceção se não existir nenhuma mensagem com o identificador especificado na fila. |
| ReceiveById(String, MessageQueueTransaction) |
Recebe a mensagem que corresponde ao identificador dado (de uma fila transacional) e imediatamente abre uma exceção se não existir nenhuma mensagem com o identificador especificado na fila. |
| ReceiveById(String, MessageQueueTransactionType) |
Recebe a mensagem que corresponde ao identificador indicado e levanta imediatamente uma exceção se não existir nenhuma mensagem com o identificador especificado na fila. |
| ReceiveById(String, TimeSpan) |
Recebe a mensagem que corresponde ao identificador indicado (de uma fila não transacional) e espera até que uma mensagem com o identificador especificado esteja disponível na fila ou o time-out expire. |
| ReceiveById(String, TimeSpan, MessageQueueTransaction) |
Recebe a mensagem que corresponde ao identificador dado (de uma fila transacional) e espera até que uma mensagem com o identificador especificado esteja disponível na fila ou que o time-out expire. |
| ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
Recebe a mensagem que corresponde ao identificador dado e espera até que uma mensagem com o identificador especificado esteja disponível na fila ou até que o time-out expire. |
ReceiveById(String)
Recebe a mensagem que corresponde ao identificador dado de uma fila não transacional e levanta imediatamente uma exceção se não existir nenhuma mensagem com o identificador especificado na fila.
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
Parâmetros
Devoluções
A Message propriedade cujo Id corresponde ao id parâmetro passado em.
Exceções
O id parâmetro é null.
A mensagem com o especificado id não foi encontrada.
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Exemplos
O exemplo de código a seguir demonstra o uso de 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);
Observações
Use este método para ler uma mensagem com um identificador conhecido e removê-la da fila. Este método lança uma exceção imediatamente se a mensagem não estiver na fila.
A Id propriedade de uma mensagem é única em toda a empresa de Fila de Mensagens, pelo que haverá no máximo uma mensagem na fila que corresponde ao parâmetro dado id .
Dois outros métodos permitem receber mensagens de uma fila. O Receive método devolve a primeira mensagem na fila, e o ReceiveByCorrelationId(String) método é usado para recuperar um reconhecimento, relatório ou mensagem de resposta gerada pela aplicação que foi criada como resultado de uma mensagem enviada para a fila.
Para ler uma mensagem com um identificador especificado sem a remover da fila, use o PeekById(String) método. O PeekById(String) método devolve sempre a primeira mensagem da fila, pelo que as chamadas subsequentes ao método devolvem a mesma mensagem, a menos que chegue uma mensagem de prioridade superior à fila.
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
ReceiveById(String, MessageQueueTransaction)
Recebe a mensagem que corresponde ao identificador dado (de uma fila transacional) e imediatamente abre uma exceção se não existir nenhuma mensagem com o identificador especificado na fila.
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
Parâmetros
- transaction
- MessageQueueTransaction
O objeto MessageQueueTransaction.
Devoluções
A Message propriedade cujo Id corresponde ao id parâmetro passado em.
Exceções
A mensagem com o especificado id não foi encontrada.
A fila não é transacional.
-ou-
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Exemplos
O exemplo de código a seguir demonstra o uso de 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();
}
Observações
Use este método para ler uma mensagem com um identificador conhecido e removê-la da fila, usando o contexto interno de transação definido pelo transaction parâmetro. Este método lança uma exceção imediatamente se a mensagem não estiver na fila
A Id propriedade de uma mensagem é única em toda a empresa de Fila de Mensagens, pelo que haverá no máximo uma mensagem na fila que corresponde ao parâmetro dado id .
Como este método é chamado numa fila transacional, a mensagem recebida seria devolvida à fila se a transação for abortada. A mensagem não é removida permanentemente da fila até que a transação seja confirmada.
Dois outros métodos permitem receber mensagens de uma fila. O Receive método devolve a primeira mensagem na fila, e o ReceiveByCorrelationId(String) método é usado para recuperar um reconhecimento, relatório ou mensagem de resposta gerada pela aplicação que foi criada como resultado de uma mensagem enviada para a fila.
Para ler uma mensagem com um identificador especificado sem a remover da fila, use o PeekById(String) método. O PeekById(String) método devolve sempre a primeira mensagem da fila, pelo que as chamadas subsequentes ao método devolvem a mesma mensagem, a menos que chegue uma mensagem de prioridade superior à fila. Não existe contexto de transação associado a uma mensagem devolvida por uma chamada para PeekById(String). Como PeekById(String) não remove nenhuma mensagem na fila, não haveria nada a reverter se a transação fosse abortada.
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
ReceiveById(String, MessageQueueTransactionType)
Recebe a mensagem que corresponde ao identificador indicado e levanta imediatamente uma exceção se não existir nenhuma mensagem com o identificador especificado na fila.
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
Parâmetros
- transactionType
- MessageQueueTransactionType
Um dos MessageQueueTransactionType valores, descreve o tipo de contexto de transação a associar à mensagem.
Devoluções
A Message propriedade cujo Id corresponde ao id parâmetro passado em.
Exceções
O id parâmetro é null.
A mensagem com o especificado id não foi encontrada.
O transactionType parâmetro não é um dos MessageQueueTransactionType membros.
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Exemplos
O exemplo de código a seguir demonstra o uso de 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);
Observações
Use este método para ler uma mensagem com um identificador conhecido e removê-la da fila. Este método lança uma exceção imediatamente se a mensagem não estiver na fila. Caso contrário, a mensagem é removida da fila e devolvida à aplicação usando um contexto de transação definido pelo transactionType parâmetro.
Especifique Automatic para o transactionType parâmetro se já existe um contexto de transação externo associado à thread que pretende usar para receber a mensagem. Especifique Single se quer receber a mensagem como uma única transação interna. Pode especificar None se quer receber uma mensagem de uma fila transacional fora do contexto de uma transação.
A Id propriedade de uma mensagem é única em toda a empresa de Fila de Mensagens, pelo que haverá no máximo uma mensagem na fila que corresponde ao parâmetro dado id . Se a mensagem com o identificador especificado estiver numa fila diferente da associada a esta MessageQueue instância, a mensagem não será encontrada.
Se este método for chamado para receber uma mensagem de uma fila transacional, a mensagem recebida será devolvida à fila se a transação for abortada. A mensagem não é removida permanentemente da fila até que a transação seja confirmada.
Dois outros métodos permitem receber mensagens de uma fila. O Receive método devolve a primeira mensagem na fila, e o ReceiveByCorrelationId(String) método é usado para recuperar um reconhecimento, relatório ou mensagem de resposta gerada pela aplicação que foi criada como resultado de uma mensagem enviada para a fila.
Para ler uma mensagem com um identificador especificado sem a remover da fila, use o PeekById(String) método. O PeekById(String) método devolve sempre a primeira mensagem da fila, pelo que as chamadas subsequentes ao método devolvem a mesma mensagem, a menos que chegue uma mensagem de prioridade superior à fila. Não existe contexto de transação associado a uma mensagem devolvida por uma chamada para PeekById(String). Como PeekById(String) não remove nenhuma mensagem na fila, não haveria nada a reverter se a transação fosse abortada.
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
ReceiveById(String, TimeSpan)
Recebe a mensagem que corresponde ao identificador indicado (de uma fila não transacional) e espera até que uma mensagem com o identificador especificado esteja disponível na fila ou o time-out expire.
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
Parâmetros
- timeout
- TimeSpan
A TimeSpan indica o tempo a esperar até que uma nova mensagem esteja disponível para inspeção.
Devoluções
A Message propriedade cujo Id corresponde ao id parâmetro passado em.
Exceções
O id parâmetro é null.
O valor especificado para o timeout parâmetro não é válido, possivelmente timeout menor ou maior que ZeroInfiniteTimeout.
Uma mensagem com o especificado id não chegou à fila antes do tempo expirar.
-ou-
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Exemplos
O exemplo de código a seguir demonstra o uso de 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));
Observações
Use este método para ler uma mensagem com um identificador conhecido e removê-la da fila. Este método retorna imediatamente se a mensagem com o identificador especificado pelo id parâmetro estiver na fila. Caso contrário, o método espera o período de tempo indicado até que uma nova mensagem chegue. Se uma nova mensagem não chegar antes do time-out expirar, é lançada uma exceção.
O timeout parâmetro não especifica o tempo total de execução deste método. Em vez disso, especifica o tempo de espera pela chegada de uma nova mensagem à fila. Cada vez que chega uma nova mensagem, este método examina o Id valor da nova mensagem para ver se corresponde ao id parâmetro. Caso contrário, este método reinicia o período de time-out e espera que chegue outra nova mensagem. Assim, se novas mensagens continuarem a chegar dentro do período de time-out, é possível que este método continue a funcionar indefinidamente, seja até o período expirar sem que cheguem novas mensagens, ou até chegar uma mensagem que Id corresponda ao id parâmetro.
A Id propriedade de uma mensagem é única em toda a empresa de Fila de Mensagens, pelo que haverá no máximo uma mensagem na fila que corresponde ao parâmetro dado id .
Utilize esta sobrecarga de ReceiveById(String) quando é aceitável que a thread atual seja bloqueada, desde que novas mensagens continuem a chegar à fila dentro do período de tempo especificado pelo timeout parâmetro. A thread ficará bloqueada pelo menos durante o período de tempo dado, ou indefinidamente se especificar o valor InfiniteTimeout do timeout parâmetro, ou se novas mensagens continuarem a chegar à fila dentro do período de tempo especificado pelo timeout parâmetro.
Dois outros métodos permitem receber mensagens de uma fila. O Receive método devolve a primeira mensagem na fila, e o ReceiveByCorrelationId(String) método é usado para recuperar um reconhecimento, relatório ou mensagem de resposta gerada pela aplicação que foi criada como resultado de uma mensagem enviada para a fila.
Para ler uma mensagem com um identificador especificado sem a remover da fila, use o PeekById(String) método. O PeekById(String) método devolve sempre a primeira mensagem da fila, pelo que as chamadas subsequentes ao método devolvem a mesma mensagem, a menos que chegue uma mensagem de prioridade superior à fila.
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
ReceiveById(String, TimeSpan, MessageQueueTransaction)
Recebe a mensagem que corresponde ao identificador dado (de uma fila transacional) e espera até que uma mensagem com o identificador especificado esteja disponível na fila ou que o time-out expire.
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
Parâmetros
- timeout
- TimeSpan
A TimeSpan indica o tempo a esperar até que uma nova mensagem esteja disponível para inspeção.
- transaction
- MessageQueueTransaction
O objeto MessageQueueTransaction.
Devoluções
A Message propriedade cujo Id corresponde ao id parâmetro passado em.
Exceções
O valor especificado para o timeout parâmetro não é válido, possivelmente timeout menor ou maior que ZeroInfiniteTimeout.
Uma mensagem com o especificado id não chegou à fila antes do tempo expirar.
-ou-
A fila não é transacional.
-ou-
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Exemplos
O exemplo de código a seguir demonstra o uso de 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();
}
Observações
Use este método para ler uma mensagem com um identificador conhecido e removê-la da fila, usando o contexto interno de transação definido pelo transaction parâmetro. Este método retorna imediatamente se a mensagem com o identificador especificado pelo id parâmetro estiver na fila. Caso contrário, o método espera o período de tempo indicado até que uma nova mensagem chegue. Se uma nova mensagem não chegar antes do time-out expirar, é lançada uma exceção.
O timeout parâmetro não especifica o tempo total de execução deste método. Em vez disso, especifica o tempo de espera pela chegada de uma nova mensagem à fila. Cada vez que chega uma nova mensagem, este método examina o Id valor da nova mensagem para ver se corresponde ao id parâmetro. Caso contrário, este método reinicia o período de time-out e espera que chegue outra nova mensagem. Assim, se novas mensagens continuarem a chegar dentro do período de time-out, é possível que este método continue a funcionar indefinidamente, seja até o período expirar sem que cheguem novas mensagens, ou até chegar uma mensagem que Id corresponda ao id parâmetro.
A Id propriedade de uma mensagem é única em toda a empresa de Fila de Mensagens, pelo que haverá no máximo uma mensagem na fila que corresponde ao parâmetro dado id .
Utilize esta sobrecarga de ReceiveById(String) quando é aceitável que a thread atual seja bloqueada, desde que novas mensagens continuem a chegar à fila dentro do período de tempo especificado pelo timeout parâmetro. A thread ficará bloqueada pelo menos durante o período de tempo indicado, ou indefinidamente se especificar o valor InfiniteTimeout do timeout parâmetro, ou se novas mensagens continuarem a chegar à fila dentro do período de tempo especificado pelo timeout parâmetro.
Como este método é chamado numa fila transacional, a mensagem recebida seria devolvida à fila se a transação for abortada. A mensagem não é removida permanentemente da fila até que a transação seja confirmada.
Dois outros métodos permitem receber mensagens de uma fila. O Receive método devolve a primeira mensagem na fila, e o ReceiveByCorrelationId(String) método é usado para recuperar um reconhecimento, relatório ou mensagem de resposta gerada pela aplicação que foi criada como resultado de uma mensagem enviada para a fila.
Para ler uma mensagem com um identificador especificado sem a remover da fila, use o PeekById(String) método. O PeekById(String) método devolve sempre a primeira mensagem na fila, pelo que as chamadas subsequentes ao método devolvem a mesma mensagem, a menos que uma mensagem de prioridade superior chegue à fila. Não existe contexto de transação associado a uma mensagem devolvida por uma chamada para PeekById(String). Como PeekById(String) não remove nenhuma mensagem na fila, não haveria nada a reverter se a transação fosse abortada.
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
ReceiveById(String, TimeSpan, MessageQueueTransactionType)
Recebe a mensagem que corresponde ao identificador dado e espera até que uma mensagem com o identificador especificado esteja disponível na fila ou até que o time-out expire.
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
Parâmetros
- timeout
- TimeSpan
A TimeSpan indica o tempo a esperar até que uma nova mensagem esteja disponível para inspeção.
- transactionType
- MessageQueueTransactionType
Um dos MessageQueueTransactionType valores, descreve o tipo de contexto de transação a associar à mensagem.
Devoluções
A Message propriedade cujo Id corresponde ao id parâmetro passado em.
Exceções
O id parâmetro é null.
O valor especificado para o timeout parâmetro não é válido, possivelmente timeout menor ou maior que ZeroInfiniteTimeout.
Uma mensagem com o especificado id não chegou à fila antes do tempo expirar.
-ou-
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
O transactionType parâmetro não é um dos MessageQueueTransactionType membros.
Exemplos
O exemplo de código a seguir demonstra o uso de 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);
Observações
Use este método para ler uma mensagem com um identificador conhecido e removê-la da fila. Este método retorna imediatamente se a mensagem com o identificador especificado pelo id parâmetro estiver na fila, usando um contexto de transação definido pelo transactionType parâmetro. Caso contrário, o método espera o período de tempo indicado até que uma nova mensagem chegue. Se uma nova mensagem não chegar antes do time-out expirar, é lançada uma exceção.
O timeout parâmetro não especifica o tempo total de execução deste método. Em vez disso, especifica o tempo de espera pela chegada de uma nova mensagem à fila. Cada vez que chega uma nova mensagem, este método examina o Id valor da nova mensagem para ver se corresponde ao id parâmetro. Caso contrário, este método reinicia o período de time-out e espera que chegue outra nova mensagem. Assim, se novas mensagens continuarem a chegar dentro do período de time-out, é possível que este método continue a funcionar indefinidamente, seja até o período expirar sem que cheguem novas mensagens, ou até chegar uma mensagem que Id corresponda ao id parâmetro.
Especifique Automatic para o transactionType parâmetro se já existe um contexto de transação externo associado à thread que pretende usar para receber a mensagem. Especifique Single se quer receber a mensagem como uma única transação interna. Pode especificar None se quer receber uma mensagem de uma fila transacional fora do contexto de uma transação.
A Id propriedade de uma mensagem é única em toda a empresa de Fila de Mensagens, pelo que haverá no máximo uma mensagem na fila que corresponde ao parâmetro dado id . Se a mensagem com o identificador especificado estiver numa fila diferente da associada a esta MessageQueue instância, a mensagem não será encontrada.
Utilize esta sobrecarga de ReceiveById(String) quando é aceitável que a thread atual seja bloqueada, desde que novas mensagens continuem a chegar à fila dentro do período de tempo especificado pelo timeout parâmetro. A thread ficará bloqueada pelo menos durante o período de tempo dado, ou indefinidamente se especificar o valor InfiniteTimeout do timeout parâmetro, ou se novas mensagens continuarem a chegar à fila dentro do período de tempo especificado pelo timeout parâmetro.
Se este método for chamado para receber uma mensagem de uma fila transacional, a mensagem recebida será devolvida à fila se a transação for abortada. A mensagem não é removida permanentemente da fila até que a transação seja confirmada.
Dois outros métodos permitem receber mensagens de uma fila. O Receive método devolve a primeira mensagem na fila, e o ReceiveByCorrelationId(String) método é usado para recuperar um reconhecimento, relatório ou mensagem de resposta gerada pela aplicação que foi criada como resultado de uma mensagem enviada para a fila.
Para ler uma mensagem com um identificador especificado sem a remover da fila, use o PeekById(String) método. O PeekById(String) método devolve sempre a primeira mensagem da fila, pelo que as chamadas subsequentes ao método devolvem a mesma mensagem, a menos que chegue uma mensagem de prioridade superior à fila. Não existe contexto de transação associado a uma mensagem devolvida por uma chamada para PeekById(String). Como PeekById(String) não remove nenhuma mensagem na fila, não haveria nada a reverter se a transação fosse abortada.
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |