MessageQueue.ReceiveById Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Recibe el mensaje que coincide con el identificador dado y lo quita de la cola.
Sobrecargas
ReceiveById(String) |
Recibe el mensaje que coincide con el identificador dado desde una cola que no es transaccional e inmediatamente inicia una excepción si la cola no contiene ningún mensaje con el identificador especificado. |
ReceiveById(String, MessageQueueTransaction) |
Recibe el mensaje que coincide con el identificador dado (desde una cola transaccional) e inmediatamente inicia una excepción si la cola no contiene ningún mensaje con el identificador especificado. |
ReceiveById(String, MessageQueueTransactionType) |
Recibe el mensaje que coincide con el identificador dado e inmediatamente inicia una excepción si la cola no contiene ningún mensaje con el identificador especificado. |
ReceiveById(String, TimeSpan) |
Recibe el mensaje que coincide con el identificador dado (desde una cola no transaccional) y espera hasta que un mensaje con el identificador especificado esté disponible en la cola o hasta que expire el tiempo de espera. |
ReceiveById(String, TimeSpan, MessageQueueTransaction) |
Recibe el mensaje que coincide con el identificador dado (desde una cola transaccional) y espera hasta que un mensaje con el identificador especificado esté disponible en la cola o hasta que expire el tiempo de espera. |
ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
Recibe el mensaje que coincide con el identificador dado y espera hasta que un mensaje con el identificador especificado esté disponible en la cola o hasta que expire el tiempo de espera. |
ReceiveById(String)
Recibe el mensaje que coincide con el identificador dado desde una cola que no es transaccional e inmediatamente inicia una excepción si la cola no contiene ningún mensaje con el identificador especificado.
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
Devoluciones
Message cuya propiedad Id coincide con el parámetro id
pasado.
Excepciones
El parámetro id
es null
.
No se encontró el mensaje con el id
especificado.
Error al obtener acceso a un método de Message Queuing.
Ejemplos
En el siguiente ejemplo de código se muestra el 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);
Comentarios
Use este método para leer un mensaje con un identificador conocido y quitarlo de la cola. Este método produce una excepción inmediatamente si el mensaje no está en la cola.
La Id propiedad de un mensaje es única en la empresa Message Queuing, por lo que habrá como máximo un mensaje en la cola que coincida con el parámetro especificado id
.
Otros dos métodos permiten recibir mensajes de una cola. El Receive método devuelve el primer mensaje de la cola y el ReceiveByCorrelationId(String) método se usa para recuperar una confirmación, un informe o un mensaje de respuesta generado por la aplicación que se creó como resultado de un mensaje enviado a la cola.
Para leer un mensaje con un identificador especificado sin quitarlo de la cola, use el PeekById(String) método . El PeekById(String) método siempre devuelve el primer mensaje de la cola, por lo que las llamadas posteriores al método devuelven el mismo mensaje a menos que llegue un mensaje de prioridad más alta en la cola.
En la tabla siguiente se muestra si este método está disponible en varios modos de grupo de trabajo.
Modo de grupo de trabajo | Disponible |
---|---|
Equipo local | Sí |
Equipo local y nombre de formato directo | Sí |
Equipo remoto | No |
Equipo remoto y nombre de formato directo | Sí |
Consulte también
Se aplica a
ReceiveById(String, MessageQueueTransaction)
Recibe el mensaje que coincide con el identificador dado (desde una cola transaccional) e inmediatamente inicia una excepción si la cola no contiene ningún mensaje con el identificador especificado.
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
Objeto MessageQueueTransaction.
Devoluciones
Message cuya propiedad Id coincide con el parámetro id
pasado.
Excepciones
No se encontró el mensaje con el id
especificado.
La cola no es transaccional.
o bien
Error al obtener acceso a un método de Message Queuing.
Ejemplos
En el siguiente ejemplo de código se muestra el 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();
}
Comentarios
Use este método para leer un mensaje con un identificador conocido y quitarlo de la cola mediante el contexto de transacción interno definido por el transaction
parámetro . Este método produce una excepción inmediatamente si el mensaje no está en la cola.
La Id propiedad de un mensaje es única en la empresa Message Queuing, por lo que habrá como máximo un mensaje en la cola que coincida con el parámetro especificado id
.
Dado que se llama a este método en una cola transaccional, el mensaje que se recibe se devolverá a la cola si se anula la transacción. El mensaje no se quita permanentemente de la cola hasta que se confirma la transacción.
Otros dos métodos permiten recibir mensajes de una cola. El Receive método devuelve el primer mensaje de la cola y el ReceiveByCorrelationId(String) método se usa para recuperar una confirmación, un informe o un mensaje de respuesta generado por la aplicación que se creó como resultado de un mensaje enviado a la cola.
Para leer un mensaje con un identificador especificado sin quitarlo de la cola, use el PeekById(String) método . El PeekById(String) método siempre devuelve el primer mensaje de la cola, por lo que las llamadas posteriores al método devuelven el mismo mensaje a menos que llegue un mensaje de prioridad más alta en la cola. No hay ningún contexto de transacción asociado a un mensaje devuelto por una llamada a PeekById(String). Dado PeekById(String) que no quita ningún mensaje de la cola, no habría nada que revertir si se anulase la transacción.
En la tabla siguiente se muestra si este método está disponible en varios modos de grupo de trabajo.
Modo de grupo de trabajo | Disponible |
---|---|
Equipo local | Sí |
Equipo local y nombre de formato directo | Sí |
Equipo remoto | No |
Equipo remoto y nombre de formato directo | Sí |
Consulte también
Se aplica a
ReceiveById(String, MessageQueueTransactionType)
Recibe el mensaje que coincide con el identificador dado e inmediatamente inicia una excepción si la cola no contiene ningún mensaje con el identificador especificado.
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
Uno de los valores de MessageQueueTransactionType, que describe el tipo de contexto de transacción que se va a asociar al mensaje.
Devoluciones
Message cuya propiedad Id coincide con el parámetro id
pasado.
Excepciones
El parámetro id
es null
.
No se encontró el mensaje con el id
especificado.
El parámetro transactionType
no es un miembro de MessageQueueTransactionType.
Error al obtener acceso a un método de Message Queuing.
Ejemplos
En el siguiente ejemplo de código se muestra el 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);
Comentarios
Use este método para leer un mensaje con un identificador conocido y quitarlo de la cola. Este método produce una excepción inmediatamente si el mensaje no está en la cola. De lo contrario, el mensaje se quita de la cola y se devuelve a la aplicación mediante un contexto de transacción definido por el transactionType
parámetro .
Especifique Automatic
para el transactionType
parámetro si ya hay un contexto de transacción externo asociado al subproceso que desea usar para recibir el mensaje. Especifique Single
si desea recibir el mensaje como una única transacción interna. Puede especificar None
si desea recibir un mensaje de una cola transaccional fuera de un contexto de transacción.
La Id propiedad de un mensaje es única en la empresa Message Queuing, por lo que habrá como máximo un mensaje en la cola que coincida con el parámetro especificado id
. Si el mensaje con el identificador especificado está en una cola distinta de la asociada a esta MessageQueue instancia, no se encontrará el mensaje.
Si se llama a este método para recibir un mensaje de una cola transaccional, el mensaje que se recibe se devolverá a la cola si se anula la transacción. El mensaje no se quita permanentemente de la cola hasta que se confirma la transacción.
Otros dos métodos permiten recibir mensajes de una cola. El Receive método devuelve el primer mensaje de la cola y el ReceiveByCorrelationId(String) método se usa para recuperar una confirmación, un informe o un mensaje de respuesta generado por la aplicación que se creó como resultado de un mensaje enviado a la cola.
Para leer un mensaje con un identificador especificado sin quitarlo de la cola, use el PeekById(String) método . El PeekById(String) método siempre devuelve el primer mensaje de la cola, por lo que las llamadas posteriores al método devuelven el mismo mensaje a menos que llegue un mensaje de prioridad más alta en la cola. No hay ningún contexto de transacción asociado a un mensaje devuelto por una llamada a PeekById(String). Dado PeekById(String) que no quita ningún mensaje de la cola, no habría nada que revertir si se anulase la transacción.
En la tabla siguiente se muestra si este método está disponible en varios modos de grupo de trabajo.
Modo de grupo de trabajo | Disponible |
---|---|
Equipo local | Sí |
Equipo local y nombre de formato directo | Sí |
Equipo remoto | No |
Equipo remoto y nombre de formato directo | Sí |
Consulte también
Se aplica a
ReceiveById(String, TimeSpan)
Recibe el mensaje que coincide con el identificador dado (desde una cola no transaccional) y espera hasta que un mensaje con el identificador especificado esté disponible en la cola o hasta que expire el tiempo de espera.
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
TimeSpan que indica el tiempo que hay que esperar hasta que haya un nuevo mensaje disponible para inspección.
Devoluciones
Message cuya propiedad Id coincide con el parámetro id
pasado.
Excepciones
El parámetro id
es null
.
El valor que especifica el parámetro timeout
no es válido, quizás porque timeout
es menor que Zero o mayor que InfiniteTimeout.
No llegó a la cola ningún mensaje con el id
especificado antes de que expirara el tiempo de espera.
o bien
Error al obtener acceso a un método de Message Queuing.
Ejemplos
En el siguiente ejemplo de código se muestra el 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));
Comentarios
Use este método para leer un mensaje con un identificador conocido y quitarlo de la cola. Este método devuelve inmediatamente si el mensaje con el identificador especificado por el id
parámetro está en la cola. De lo contrario, el método espera el período de tiempo dado para que llegue un nuevo mensaje. Si un nuevo mensaje no llega antes de que expire el tiempo de espera, se produce una excepción.
El timeout
parámetro no especifica el tiempo de ejecución total para este método. En su lugar, especifica el tiempo de espera para que llegue un nuevo mensaje a la cola. Cada vez que llega un nuevo mensaje, este método examina el Id del nuevo mensaje para ver si coincide con el id
parámetro . Si no es así, este método inicia el período de tiempo de espera y espera a que llegue otro nuevo mensaje. Por lo tanto, si los nuevos mensajes continúan llegando dentro del período de tiempo de espera, es posible que este método continúe ejecutándose indefinidamente, ya sea hasta que expire el período de tiempo de espera sin que lleguen mensajes nuevos o hasta que llegue un mensaje cuyo Id parámetro coincida con el id
parámetro .
La Id propiedad de un mensaje es única en la empresa Message Queuing, por lo que habrá como máximo un mensaje en la cola que coincida con el parámetro especificado id
.
Use esta sobrecarga de cuando sea aceptable que el subproceso actual se bloquee siempre que los nuevos mensajes sigan llegando a la cola dentro del período de tiempo de ReceiveById(String) espera especificado por el timeout
parámetro . El subproceso se bloqueará durante al menos el período de tiempo especificado, o indefinidamente si especificó el valor InfiniteTimeout del timeout
parámetro, o si los mensajes nuevos continúan llegando a la cola dentro del período de tiempo de espera especificado por el timeout
parámetro .
Otros dos métodos permiten recibir mensajes de una cola. El Receive método devuelve el primer mensaje de la cola y el ReceiveByCorrelationId(String) método se usa para recuperar una confirmación, un informe o un mensaje de respuesta generado por la aplicación que se creó como resultado de un mensaje enviado a la cola.
Para leer un mensaje con un identificador especificado sin quitarlo de la cola, use el PeekById(String) método . El PeekById(String) método siempre devuelve el primer mensaje de la cola, por lo que las llamadas posteriores al método devuelven el mismo mensaje a menos que llegue un mensaje de prioridad más alta en la cola.
En la tabla siguiente se muestra si este método está disponible en varios modos de grupo de trabajo.
Modo de grupo de trabajo | Disponible |
---|---|
Equipo local | Sí |
Equipo local y nombre de formato directo | Sí |
Equipo remoto | No |
Equipo remoto y nombre de formato directo | Sí |
Consulte también
Se aplica a
ReceiveById(String, TimeSpan, MessageQueueTransaction)
Recibe el mensaje que coincide con el identificador dado (desde una cola transaccional) y espera hasta que un mensaje con el identificador especificado esté disponible en la cola o hasta que expire el tiempo de espera.
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
TimeSpan que indica el tiempo que hay que esperar hasta que haya un nuevo mensaje disponible para inspección.
- transaction
- MessageQueueTransaction
Objeto MessageQueueTransaction.
Devoluciones
Message cuya propiedad Id coincide con el parámetro id
pasado.
Excepciones
El valor que especifica el parámetro timeout
no es válido, quizás porque timeout
es menor que Zero o mayor que InfiniteTimeout.
No llegó a la cola ningún mensaje con el id
especificado antes de que expirara el tiempo de espera.
o bien
La cola no es transaccional.
o bien
Error al obtener acceso a un método de Message Queuing.
Ejemplos
En el siguiente ejemplo de código se muestra el 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();
}
Comentarios
Use este método para leer un mensaje con un identificador conocido y quitarlo de la cola mediante el contexto de transacción interno definido por el transaction
parámetro . Este método devuelve inmediatamente si el mensaje con el identificador especificado por el id
parámetro está en la cola. De lo contrario, el método espera el período de tiempo dado para que llegue un nuevo mensaje. Si un nuevo mensaje no llega antes de que expire el tiempo de espera, se produce una excepción.
El timeout
parámetro no especifica el tiempo de ejecución total para este método. En su lugar, especifica el tiempo de espera para que llegue un nuevo mensaje a la cola. Cada vez que llega un nuevo mensaje, este método examina el Id del nuevo mensaje para ver si coincide con el id
parámetro . Si no es así, este método inicia el período de tiempo de espera y espera a que llegue otro nuevo mensaje. Por lo tanto, si los nuevos mensajes continúan llegando dentro del período de tiempo de espera, es posible que este método continúe ejecutándose indefinidamente, ya sea hasta que expire el período de tiempo de espera sin que lleguen mensajes nuevos o hasta que llegue un mensaje cuyo Id parámetro coincida con el id
parámetro .
La Id propiedad de un mensaje es única en la empresa Message Queuing, por lo que habrá como máximo un mensaje en la cola que coincida con el parámetro especificado id
.
Use esta sobrecarga de cuando sea aceptable que el subproceso actual se bloquee siempre que los nuevos mensajes sigan llegando a la cola dentro del período de tiempo de ReceiveById(String) espera especificado por el timeout
parámetro . El subproceso se bloqueará durante al menos el período de tiempo especificado, o indefinidamente si especificó el valor InfiniteTimeout del timeout
parámetro, o si los mensajes nuevos continúan llegando a la cola dentro del período de tiempo de espera especificado por el timeout
parámetro .
Dado que se llama a este método en una cola transaccional, el mensaje que se recibe se devolverá a la cola si se anula la transacción. El mensaje no se quita permanentemente de la cola hasta que se confirma la transacción.
Otros dos métodos permiten recibir mensajes de una cola. El Receive método devuelve el primer mensaje de la cola y el ReceiveByCorrelationId(String) método se usa para recuperar una confirmación, un informe o un mensaje de respuesta generado por la aplicación que se creó como resultado de un mensaje enviado a la cola.
Para leer un mensaje con un identificador especificado sin quitarlo de la cola, use el PeekById(String) método . El PeekById(String) método siempre devuelve el primer mensaje de la cola, por lo que las llamadas posteriores al método devuelven el mismo mensaje, a menos que llegue un mensaje de prioridad más alta en la cola. No hay ningún contexto de transacción asociado a un mensaje devuelto por una llamada a PeekById(String). Dado PeekById(String) que no quita ningún mensaje de la cola, no habría nada que revertir si se anulase la transacción.
En la tabla siguiente se muestra si este método está disponible en varios modos de grupo de trabajo.
Modo de grupo de trabajo | Disponible |
---|---|
Equipo local | Sí |
Equipo local y nombre de formato directo | Sí |
Equipo remoto | No |
Equipo remoto y nombre de formato directo | Sí |
Consulte también
Se aplica a
ReceiveById(String, TimeSpan, MessageQueueTransactionType)
Recibe el mensaje que coincide con el identificador dado y espera hasta que un mensaje con el identificador especificado esté disponible en la cola o hasta que expire el tiempo de espera.
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
TimeSpan que indica el tiempo que hay que esperar hasta que haya un nuevo mensaje disponible para inspección.
- transactionType
- MessageQueueTransactionType
Uno de los valores de MessageQueueTransactionType, que describe el tipo de contexto de transacción que se va a asociar al mensaje.
Devoluciones
Message cuya propiedad Id coincide con el parámetro id
pasado.
Excepciones
El parámetro id
es null
.
El valor que especifica el parámetro timeout
no es válido, quizás porque timeout
es menor que Zero o mayor que InfiniteTimeout.
No llegó a la cola ningún mensaje con el id
especificado antes de que expirara el tiempo de espera.
o bien
Error al obtener acceso a un método de Message Queuing.
El parámetro transactionType
no es un miembro de MessageQueueTransactionType.
Ejemplos
En el siguiente ejemplo de código se muestra el 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);
Comentarios
Use este método para leer un mensaje con un identificador conocido y quitarlo de la cola. Este método devuelve inmediatamente si el mensaje con el identificador especificado por el id
parámetro está en la cola, utilizando un contexto de transacción definido por el transactionType
parámetro . De lo contrario, el método espera el período de tiempo dado para que llegue un nuevo mensaje. Si un nuevo mensaje no llega antes de que expire el tiempo de espera, se produce una excepción.
El timeout
parámetro no especifica el tiempo de ejecución total para este método. En su lugar, especifica el tiempo de espera para que llegue un nuevo mensaje a la cola. Cada vez que llega un nuevo mensaje, este método examina el Id del nuevo mensaje para ver si coincide con el id
parámetro . Si no es así, este método inicia el período de tiempo de espera y espera a que llegue otro nuevo mensaje. Por lo tanto, si los nuevos mensajes continúan llegando dentro del período de tiempo de espera, es posible que este método continúe ejecutándose indefinidamente, ya sea hasta que expire el período de tiempo de espera sin que lleguen mensajes nuevos o hasta que llegue un mensaje cuyo Id parámetro coincida con el id
parámetro .
Especifique Automatic
para el transactionType
parámetro si ya hay un contexto de transacción externo asociado al subproceso que desea usar para recibir el mensaje. Especifique Single
si desea recibir el mensaje como una única transacción interna. Puede especificar None
si desea recibir un mensaje de una cola transaccional fuera de un contexto de transacción.
La Id propiedad de un mensaje es única en la empresa Message Queuing, por lo que habrá como máximo un mensaje en la cola que coincida con el parámetro especificado id
. Si el mensaje con el identificador especificado está en una cola distinta de la asociada a esta MessageQueue instancia, no se encontrará el mensaje.
Use esta sobrecarga de cuando sea aceptable que el subproceso actual se bloquee siempre que los nuevos mensajes sigan llegando a la cola dentro del período de tiempo de ReceiveById(String) espera especificado por el timeout
parámetro . El subproceso se bloqueará durante al menos el período de tiempo especificado, o indefinidamente si especificó el valor InfiniteTimeout del timeout
parámetro, o si los mensajes nuevos continúan llegando a la cola dentro del período de tiempo de espera especificado por el timeout
parámetro .
Si se llama a este método para recibir un mensaje de una cola transaccional, el mensaje que se recibe se devolverá a la cola si se anula la transacción. El mensaje no se quita permanentemente de la cola hasta que se confirma la transacción.
Otros dos métodos permiten recibir mensajes de una cola. El Receive método devuelve el primer mensaje de la cola y el ReceiveByCorrelationId(String) método se usa para recuperar una confirmación, un informe o un mensaje de respuesta generado por la aplicación que se creó como resultado de un mensaje enviado a la cola.
Para leer un mensaje con un identificador especificado sin quitarlo de la cola, use el PeekById(String) método . El PeekById(String) método siempre devuelve el primer mensaje de la cola, por lo que las llamadas posteriores al método devuelven el mismo mensaje a menos que llegue un mensaje de prioridad más alta en la cola. No hay ningún contexto de transacción asociado a un mensaje devuelto por una llamada a PeekById(String). Dado PeekById(String) que no quita ningún mensaje de la cola, no habría nada que revertir si se anulase la transacción.
En la tabla siguiente se muestra si este método está disponible en varios modos de grupo de trabajo.
Modo de grupo de trabajo | Disponible |
---|---|
Equipo local | Sí |
Equipo local y nombre de formato directo | Sí |
Equipo remoto | No |
Equipo remoto y nombre de formato directo | Sí |