MessageQueue.ReceiveById Método

Definição

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

id
String

A Id mensagem para receber.

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

id
String

A Id mensagem para receber.

Devoluções

A Message propriedade cujo Id corresponde ao id parâmetro passado em.

Exceções

O id parâmetro é null.

-ou-

O transaction parâmetro é null.

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

id
String

A Id mensagem para receber.

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

id
String

A Id mensagem para receber.

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

id
String

A Id mensagem para receber.

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.

-ou-

O transaction 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-

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

id
String

A Id mensagem para receber.

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

Ver também

Aplica-se a