MessageQueue.ReceiveById Метод

Определение

Получает сообщение, которое соответствует заданному идентификатору, удаляя его из очереди.

Перегрузки

ReceiveById(String)

Получает из нетранзакционной очереди сообщение, которое соответствует заданному идентификатору, и сразу инициирует исключение, если в настоящий момент в очереди нет сообщения с указанным идентификатором.

ReceiveById(String, MessageQueueTransaction)

Получает сообщение, которое соответствует заданному идентификатору (из транзакционной очереди), и сразу инициирует исключение, если в настоящий момент в очереди нет сообщения с указанным идентификатором.

ReceiveById(String, MessageQueueTransactionType)

Получает сообщение, которое соответствует заданному идентификатору, и сразу инициирует исключение, если в настоящий момент в очереди нет сообщения с указанным идентификатором.

ReceiveById(String, TimeSpan)

Получает сообщение, которое соответствует заданному идентификатору (из нетранзакционной очереди), и ожидает, пока в очереди не появится сообщение с указанным идентификатором, или пока не истечет тайм-аут.

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Получает сообщение, которое соответствует заданному идентификатору (из транзакционной очереди), и ожидает, пока в очереди не появится сообщение с указанным идентификатором, или пока не истечет тайм-аут.

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Получает сообщение, которое соответствует заданному идентификатору, и ожидает, пока в очереди не появится сообщение с указанным идентификатором, или пока не истечет тайм-аут.

ReceiveById(String)

Получает из нетранзакционной очереди сообщение, которое соответствует заданному идентификатору, и сразу инициирует исключение, если в настоящий момент в очереди нет сообщения с указанным идентификатором.

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

Параметры

id
String

Свойство Id получаемого сообщения.

Возвращаемое значение

Объект Message, свойство Id которого соответствует переданному в объект параметру id.

Исключения

Параметр id имеет значение null.

Не удалось найти сообщение с указанным параметром id.

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции 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);

Комментарии

Этот метод используется для чтения сообщения с известным идентификатором и его удаления из очереди. Этот метод немедленно создает исключение, если сообщение отсутствует в очереди.

Свойство Id сообщения уникально в пределах предприятия Очереди сообщений, поэтому в очереди будет не более одного сообщения, соответствующего заданному id параметру.

Два других метода позволяют получать сообщения из очереди. Метод Receive возвращает первое сообщение в очереди, а ReceiveByCorrelationId(String) метод используется для получения подтверждения, отчета или ответного сообщения, созданного приложением, которое было создано в результате отправки сообщения в очередь.

Чтобы прочитать сообщение с указанным идентификатором, не удаляя его из очереди, используйте PeekById(String) метод . Метод PeekById(String) всегда возвращает первое сообщение в очереди, поэтому последующие вызовы метода возвращают одно и то же сообщение, если в очередь не поступает сообщение с более высоким приоритетом.

В следующей таблице показано, доступен ли этот метод в различных режимах рабочей группы.

Режим рабочей группы Доступно
Локальный компьютер Да
Имя локального компьютера и прямого формата Да
Удаленный компьютер Нет
Имя удаленного компьютера и прямого формата Да

См. также раздел

Применяется к

ReceiveById(String, MessageQueueTransaction)

Получает сообщение, которое соответствует заданному идентификатору (из транзакционной очереди), и сразу инициирует исключение, если в настоящий момент в очереди нет сообщения с указанным идентификатором.

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

Параметры

id
String

Свойство Id получаемого сообщения.

Возвращаемое значение

Объект Message, свойство Id которого соответствует переданному в объект параметру id.

Исключения

Параметр id имеет значение null.

-или-

Параметр transaction имеет значение null.

Не удалось найти сообщение с указанным параметром id.

Очередь является нетранзакционной.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции 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();
}

Комментарии

Этот метод используется для чтения сообщения с известным идентификатором и его удаления из очереди с помощью внутреннего контекста транзакции, определенного параметром transaction . Этот метод немедленно создает исключение, если сообщение отсутствует в очереди.

Свойство Id сообщения уникально в пределах предприятия Очереди сообщений, поэтому в очереди будет не более одного сообщения, соответствующего заданному id параметру.

Так как этот метод вызывается в очереди транзакций, полученное сообщение будет возвращено в очередь, если транзакция прервана. Сообщение не будет окончательно удалено из очереди, пока транзакция не будет зафиксирована.

Два других метода позволяют получать сообщения из очереди. Метод Receive возвращает первое сообщение в очереди, а ReceiveByCorrelationId(String) метод используется для получения подтверждения, отчета или ответного сообщения, созданного приложением, которое было создано в результате отправки сообщения в очередь.

Чтобы прочитать сообщение с указанным идентификатором, не удаляя его из очереди, используйте PeekById(String) метод . Метод PeekById(String) всегда возвращает первое сообщение в очереди, поэтому последующие вызовы метода возвращают одно и то же сообщение, если в очередь не поступает сообщение с более высоким приоритетом. Контекст транзакции не связан с сообщением, возвращенным вызовом PeekById(String). Так как PeekById(String) не удаляет сообщения в очереди, откат не будет выполняться, если транзакция была прервана.

В следующей таблице показано, доступен ли этот метод в различных режимах рабочей группы.

Режим рабочей группы Доступно
Локальный компьютер Да
Имя локального компьютера и прямого формата Да
Удаленный компьютер Нет
Имя удаленного компьютера и прямого формата Да

См. также раздел

Применяется к

ReceiveById(String, MessageQueueTransactionType)

Получает сообщение, которое соответствует заданному идентификатору, и сразу инициирует исключение, если в настоящий момент в очереди нет сообщения с указанным идентификатором.

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

Параметры

id
String

Свойство Id получаемого сообщения.

transactionType
MessageQueueTransactionType

Одно из значений MessageQueueTransactionType, описывающее тип контекста транзакции, связываемого с сообщением.

Возвращаемое значение

Объект Message, свойство Id которого соответствует переданному в объект параметру id.

Исключения

Параметр id имеет значение null.

Не удалось найти сообщение с указанным параметром id.

Параметр transactionType не является одним из членов MessageQueueTransactionType.

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции 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);

Комментарии

Этот метод используется для чтения сообщения с известным идентификатором и его удаления из очереди. Этот метод немедленно создает исключение, если сообщение отсутствует в очереди. В противном случае сообщение удаляется из очереди и возвращается в приложение с помощью контекста транзакции, определенного параметром transactionType .

Укажите Automatic для transactionType параметра , если к потоку уже подключен внешний контекст транзакции, который вы хотите использовать для получения сообщения. Укажите Single , нужно ли получать сообщение в виде одной внутренней транзакции. Вы можете указать None , хотите ли вы получать сообщение из очереди транзакций вне контекста транзакции.

Свойство Id сообщения уникально в пределах предприятия Очереди сообщений, поэтому в очереди будет не более одного сообщения, соответствующего заданному id параметру. Если сообщение с указанным идентификатором находится в очереди, отличной от очереди, связанной с этим MessageQueue экземпляром, сообщение не будет найдено.

Если этот метод вызывается для получения сообщения из очереди транзакций, полученное сообщение будет возвращено в очередь, если транзакция прервана. Сообщение не будет окончательно удалено из очереди, пока транзакция не будет зафиксирована.

Два других метода позволяют получать сообщения из очереди. Метод Receive возвращает первое сообщение в очереди, а ReceiveByCorrelationId(String) метод используется для получения подтверждения, отчета или ответного сообщения, созданного приложением, которое было создано в результате отправки сообщения в очередь.

Чтобы прочитать сообщение с указанным идентификатором, не удаляя его из очереди, используйте PeekById(String) метод . Метод PeekById(String) всегда возвращает первое сообщение в очереди, поэтому последующие вызовы метода возвращают одно и то же сообщение, если в очередь не поступает сообщение с более высоким приоритетом. Контекст транзакции не связан с сообщением, возвращенным вызовом PeekById(String). Так как PeekById(String) не удаляет сообщения в очереди, откат не будет выполняться, если транзакция была прервана.

В следующей таблице показано, доступен ли этот метод в различных режимах рабочей группы.

Режим рабочей группы Доступно
Локальный компьютер Да
Имя локального компьютера и прямого формата Да
Удаленный компьютер Нет
Имя удаленного компьютера и прямого формата Да

См. также раздел

Применяется к

ReceiveById(String, TimeSpan)

Получает сообщение, которое соответствует заданному идентификатору (из нетранзакционной очереди), и ожидает, пока в очереди не появится сообщение с указанным идентификатором, или пока не истечет тайм-аут.

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

Параметры

id
String

Свойство Id получаемого сообщения.

timeout
TimeSpan

Структура TimeSpan, показывающая время ожидания нового сообщения для проверки.

Возвращаемое значение

Объект Message, свойство Id которого соответствует переданному в объект параметру id.

Исключения

Параметр id имеет значение null.

Для параметра timeout задано недопустимое значение; возможно, значение параметра timeout меньше Zero или больше InfiniteTimeout.

Сообщение с указанным значением параметра id до истечения тайм-аута в очередь не поступало.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции 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));

Комментарии

Используйте этот метод, чтобы прочитать сообщение с известным идентификатором и удалить его из очереди. Этот метод возвращается немедленно, если сообщение с идентификатором, указанным параметром id , находится в очереди. В противном случае метод ожидает поступления нового сообщения в течение заданного периода времени. Если новое сообщение не поступает до истечения времени ожидания, возникает исключение.

Параметр timeout не указывает общее время выполнения для этого метода. Скорее, он указывает время ожидания поступления нового сообщения в очередь. При каждом поступлении нового сообщения этот метод проверяет Id новое сообщение, чтобы определить, соответствует ли оно параметру id . В противном случае этот метод начинает период ожидания и ожидает поступления нового сообщения. Таким образом, если новые сообщения по-прежнему поступают в течение периода ожидания, этот метод может продолжать выполняться бесконечно, либо до тех пор, пока не истечет время ожидания без поступления новых сообщений, либо до тех пор, пока не поступит сообщение, соответствующее Id параметру id .

Свойство Id сообщения является уникальным в пределах предприятия Message Queuing, поэтому в очереди будет не более одного сообщения, соответствующего заданному id параметру.

Используйте эту перегрузку , если текущий ReceiveById(String) поток может быть заблокирован до тех пор, пока новые сообщения продолжают поступать в очередь в течение периода ожидания, указанного timeout параметром . Поток будет заблокирован по крайней мере на определенный период времени или на неопределенный срок, если вы указали значение InfiniteTimeout параметра timeout или если новые сообщения по-прежнему поступают в очередь в течение периода ожидания, указанного timeout параметром .

Два других метода позволяют получать сообщения из очереди. Метод Receive возвращает первое сообщение в очереди, а ReceiveByCorrelationId(String) метод используется для получения подтверждения, отчета или ответного сообщения, созданного приложением, которое было создано в результате отправки сообщения в очередь.

Чтобы прочитать сообщение с указанным идентификатором, не удаляя его из очереди, используйте PeekById(String) метод . Метод PeekById(String) всегда возвращает первое сообщение в очереди, поэтому последующие вызовы метода возвращают одно и то же сообщение, если в очередь не поступает сообщение с более высоким приоритетом.

В следующей таблице показано, доступен ли этот метод в различных режимах рабочей группы.

Режим рабочей группы Доступно
Локальный компьютер Да
Имя локального компьютера и прямого формата Да
Удаленный компьютер Нет
Имя удаленного компьютера и прямого формата Да

См. также раздел

Применяется к

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Получает сообщение, которое соответствует заданному идентификатору (из транзакционной очереди), и ожидает, пока в очереди не появится сообщение с указанным идентификатором, или пока не истечет тайм-аут.

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

Параметры

id
String

Свойство Id получаемого сообщения.

timeout
TimeSpan

Структура TimeSpan, показывающая время ожидания нового сообщения для проверки.

Возвращаемое значение

Объект Message, свойство Id которого соответствует переданному в объект параметру id.

Исключения

Параметр id имеет значение null.

-или-

Параметр transaction имеет значение null.

Для параметра timeout задано недопустимое значение; возможно, значение параметра timeout меньше Zero или больше InfiniteTimeout.

Сообщение с указанным значением параметра id до истечения тайм-аута в очередь не поступало.

-или-

Очередь является нетранзакционной.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Примеры

В следующем коде показано использование функции 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();
}

Комментарии

Используйте этот метод для чтения сообщения с известным идентификатором и его удаления из очереди, используя внутренний контекст транзакции, определенный параметром transaction . Этот метод возвращается немедленно, если сообщение с идентификатором, указанным параметром id , находится в очереди. В противном случае метод ожидает поступления нового сообщения в течение заданного периода времени. Если новое сообщение не поступает до истечения времени ожидания, возникает исключение.

Параметр timeout не указывает общее время выполнения для этого метода. Скорее, он указывает время ожидания поступления нового сообщения в очередь. При каждом поступлении нового сообщения этот метод проверяет Id новое сообщение, чтобы определить, соответствует ли оно параметру id . В противном случае этот метод начинает период ожидания и ожидает поступления нового сообщения. Таким образом, если новые сообщения по-прежнему поступают в течение периода ожидания, этот метод может продолжать выполняться бесконечно, либо до тех пор, пока не истечет время ожидания без поступления новых сообщений, либо до тех пор, пока не поступит сообщение, соответствующее Id параметру id .

Свойство Id сообщения является уникальным в пределах предприятия Message Queuing, поэтому в очереди будет не более одного сообщения, соответствующего заданному id параметру.

Используйте эту перегрузку , если текущий ReceiveById(String) поток может быть заблокирован до тех пор, пока новые сообщения продолжают поступать в очередь в течение периода ожидания, указанного timeout параметром . Поток будет заблокирован по крайней мере на определенный период времени или на неопределенный срок, если вы указали значение InfiniteTimeout параметра timeout или если в очередь по-прежнему поступают новые сообщения в течение периода ожидания, указанного timeout параметром .

Так как этот метод вызывается в очереди транзакций, полученное сообщение будет возвращено в очередь, если транзакция будет прервана. Сообщение не удаляется окончательно из очереди, пока транзакция не будет зафиксирована.

Два других метода позволяют получать сообщения из очереди. Метод Receive возвращает первое сообщение в очереди, а ReceiveByCorrelationId(String) метод используется для получения подтверждения, отчета или ответного сообщения, созданного приложением, которое было создано в результате отправки сообщения в очередь.

Чтобы прочитать сообщение с указанным идентификатором, не удаляя его из очереди, используйте PeekById(String) метод . Метод PeekById(String) всегда возвращает первое сообщение в очереди, поэтому последующие вызовы метода возвращают одно и то же сообщение, если в очередь не поступает сообщение с более высоким приоритетом. Нет контекста транзакции, связанного с сообщением, возвращаемым вызовом PeekById(String)метода . Так как PeekById(String) не удаляет сообщения в очереди, откат не будет выполняться, если транзакция была прервана.

В следующей таблице показано, доступен ли этот метод в различных режимах рабочей группы.

Режим рабочей группы Доступно
Локальный компьютер Да
Имя локального компьютера и прямого формата Да
Удаленный компьютер Нет
Имя удаленного компьютера и прямого формата Да

См. также раздел

Применяется к

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Получает сообщение, которое соответствует заданному идентификатору, и ожидает, пока в очереди не появится сообщение с указанным идентификатором, или пока не истечет тайм-аут.

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

Параметры

id
String

Свойство Id получаемого сообщения.

timeout
TimeSpan

Структура TimeSpan, показывающая время ожидания нового сообщения для проверки.

transactionType
MessageQueueTransactionType

Одно из значений MessageQueueTransactionType, описывающее тип контекста транзакции, связываемого с сообщением.

Возвращаемое значение

Объект Message, свойство Id которого соответствует переданному в объект параметру id.

Исключения

Параметр id имеет значение null.

Для параметра timeout задано недопустимое значение; возможно, значение параметра timeout меньше Zero или больше InfiniteTimeout.

Сообщение с указанным значением параметра id до истечения тайм-аута в очередь не поступало.

-или-

При обращении к методу службы очереди сообщений возникла ошибка.

Параметр transactionType не является одним из членов MessageQueueTransactionType.

Примеры

В следующем коде показано использование функции 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);

Комментарии

Этот метод используется для чтения сообщения с известным идентификатором и его удаления из очереди. Этот метод возвращается немедленно, если сообщение с идентификатором, указанным параметром id , находится в очереди, используя контекст транзакции, определенный параметром transactionType . В противном случае метод ожидает получения нового сообщения в течение заданного периода времени. Если новое сообщение не поступает до истечения времени ожидания, возникает исключение.

Параметр timeout не указывает общее время выполнения для этого метода. Скорее, он указывает время ожидания поступления нового сообщения в очередь. Каждый раз при поступлении нового сообщения этот метод проверяет Id новое сообщение, чтобы узнать, соответствует ли оно параметру id . В противном случае этот метод запускает период ожидания и ожидает получения другого нового сообщения. Таким образом, если новые сообщения по-прежнему поступают в течение периода ожидания, этот метод может продолжать работать неограниченное время либо до истечения времени ожидания без поступления новых сообщений, либо до тех пор, пока не поступит сообщение, соответствующее Id параметру id .

Укажите Automatic для transactionType параметра , если к потоку уже подключен внешний контекст транзакции, который вы хотите использовать для получения сообщения. Укажите Single , нужно ли получать сообщение в виде одной внутренней транзакции. Вы можете указать None , хотите ли вы получать сообщение из очереди транзакций вне контекста транзакции.

Свойство Id сообщения уникально в пределах предприятия Очереди сообщений, поэтому в очереди будет не более одного сообщения, соответствующего заданному id параметру. Если сообщение с указанным идентификатором находится в очереди, отличной от очереди, связанной с этим MessageQueue экземпляром, сообщение не будет найдено.

Используйте эту перегрузку , ReceiveById(String) если это допустимо для блокировки текущего потока до тех пор, пока новые сообщения продолжают поступать в очередь в течение периода ожидания, указанного timeout параметром . Поток будет заблокирован по крайней мере на определенный период времени или на неопределенный срок, если вы указали значение InfiniteTimeout параметра timeout или если новые сообщения продолжают поступать в очередь в течение периода ожидания, указанного timeout параметром .

Если этот метод вызывается для получения сообщения из очереди транзакций, полученное сообщение будет возвращено в очередь, если транзакция прервана. Сообщение не будет окончательно удалено из очереди, пока транзакция не будет зафиксирована.

Два других метода позволяют получать сообщения из очереди. Метод Receive возвращает первое сообщение в очереди, а ReceiveByCorrelationId(String) метод используется для получения подтверждения, отчета или ответного сообщения, созданного приложением, которое было создано в результате отправки сообщения в очередь.

Чтобы прочитать сообщение с указанным идентификатором, не удаляя его из очереди, используйте PeekById(String) метод . Метод PeekById(String) всегда возвращает первое сообщение в очереди, поэтому последующие вызовы метода возвращают одно и то же сообщение, если в очередь не поступает сообщение с более высоким приоритетом. Контекст транзакции не связан с сообщением, возвращенным вызовом PeekById(String). Так как PeekById(String) не удаляет сообщения в очереди, откат не будет выполняться, если транзакция была прервана.

В следующей таблице показано, доступен ли этот метод в различных режимах рабочей группы.

Режим рабочей группы Доступно
Локальный компьютер Да
Имя локального компьютера и прямого формата Да
Удаленный компьютер Нет
Имя удаленного компьютера и прямого формата Да

См. также раздел

Применяется к