Бөлісу құралы:


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 сообщения уникально для предприятия очереди сообщений, поэтому в очереди будет не более одного сообщения, соответствующего заданному 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 сообщения уникально для предприятия очереди сообщений, поэтому в очереди будет не более одного сообщения, соответствующего заданному 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);

Комментарии

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

Параметр 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) не удаляет сообщения в очереди, откат транзакции не будет ничего делать, если транзакция была прервана.

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

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

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

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