MessageQueue.ReceiveById Método

Definición

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

id
String

Id del mensaje que se va a recibir.

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
Equipo local y nombre de formato directo
Equipo remoto No
Equipo remoto y nombre de formato directo

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

id
String

Id del mensaje que se va a recibir.

Devoluciones

Message cuya propiedad Id coincide con el parámetro id pasado.

Excepciones

El parámetro id es null.

o bien

El parámetro transaction es null.

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
Equipo local y nombre de formato directo
Equipo remoto No
Equipo remoto y nombre de formato directo

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

id
String

Id del mensaje que se va a recibir.

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
Equipo local y nombre de formato directo
Equipo remoto No
Equipo remoto y nombre de formato directo

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

id
String

Id del mensaje que se va a recibir.

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 mensaje nuevo. Por lo tanto, si los nuevos mensajes continúan llegando dentro del período de tiempo de espera, es posible que este método siga 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 id .

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 ReceiveById(String) 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 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 siguen 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 un mensaje de confirmación, informe o 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
Equipo local y nombre de formato directo
Equipo remoto No
Equipo remoto y nombre de formato directo

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

id
String

Id del mensaje que se va a recibir.

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.

o bien

El parámetro transaction 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

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 mensaje nuevo. Por lo tanto, si los nuevos mensajes continúan llegando dentro del período de tiempo de espera, es posible que este método siga 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 id .

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 ReceiveById(String) 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 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 siguen 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 un mensaje de confirmación, informe o 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
Equipo local y nombre de formato directo
Equipo remoto No
Equipo remoto y nombre de formato directo

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

id
String

Id del mensaje que se va a recibir.

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 mensaje nuevo. Por lo tanto, si los nuevos mensajes continúan llegando dentro del período de tiempo de espera, es posible que este método siga 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 id .

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 ReceiveById(String) 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 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 siguen 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 un mensaje de confirmación, informe o 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
Equipo local y nombre de formato directo
Equipo remoto No
Equipo remoto y nombre de formato directo

Consulte también

Se aplica a