MessageQueue.ReceiveById Metoda

Definicja

Odbiera komunikat zgodny z danym identyfikatorem, usuwając go z kolejki.

Przeciążenia

ReceiveById(String)

Odbiera komunikat zgodny z podanym identyfikatorem z kolejki innej niż transakcyjna i natychmiast zgłasza wyjątek, jeśli w kolejce nie istnieje żaden komunikat o określonym identyfikatorze.

ReceiveById(String, MessageQueueTransaction)

Odbiera komunikat zgodny z danym identyfikatorem (z kolejki transakcyjnej) i natychmiast zgłasza wyjątek, jeśli w kolejce nie istnieje żaden komunikat o określonym identyfikatorze.

ReceiveById(String, MessageQueueTransactionType)

Odbiera komunikat zgodny z danym identyfikatorem i natychmiast zgłasza wyjątek, jeśli w kolejce nie istnieje żaden komunikat o określonym identyfikatorze.

ReceiveById(String, TimeSpan)

Odbiera komunikat zgodny z danym identyfikatorem (z kolejki nie transakcyjnej) i czeka, aż komunikat o określonym identyfikatorze będzie dostępny w kolejce lub upłynął limit czasu.

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Odbiera komunikat zgodny z danym identyfikatorem (z kolejki transakcyjnej) i czeka, aż komunikat o określonym identyfikatorze będzie dostępny w kolejce lub upłynął limit czasu.

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Odbiera komunikat zgodny z danym identyfikatorem i czeka aż komunikat o określonym identyfikatorze będzie dostępny w kolejce lub upłynął limit czasu.

ReceiveById(String)

Odbiera komunikat zgodny z podanym identyfikatorem z kolejki innej niż transakcyjna i natychmiast zgłasza wyjątek, jeśli w kolejce nie istnieje żaden komunikat o określonym identyfikatorze.

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

Parametry

id
String

Komunikat Id do odebrania.

Zwraca

Message

Właściwość, której Id właściwość jest zgodna Message z przekazanym parametremid.

Wyjątki

Parametr id to null.

Nie można odnaleźć komunikatu z określonym id .

Wystąpił błąd podczas uzyskiwania dostępu do metody kolejkowania komunikatów.

Przykłady

W poniższym przykładzie kodu pokazano użycie metody 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);

Uwagi

Użyj tej metody, aby odczytać komunikat ze znanym identyfikatorem i usunąć go z kolejki. Ta metoda zgłasza wyjątek natychmiast, jeśli komunikat nie znajduje się w kolejce.

Właściwość Id komunikatu jest unikatowa w przedsiębiorstwie kolejkowania komunikatów, więc w kolejce będzie co najwyżej jeden komunikat zgodny z danym id parametrem.

Dwie inne metody umożliwiają odbieranie komunikatów z kolejki. Metoda Receive zwraca pierwszy komunikat w kolejce, a ReceiveByCorrelationId(String) metoda służy do pobierania potwierdzenia, raportu lub wygenerowanego przez aplikację komunikatu odpowiedzi, który został utworzony w wyniku komunikatu wysłanego do kolejki.

Aby odczytać komunikat o określonym identyfikatorze bez usunięcia go z kolejki, użyj PeekById(String) metody . Metoda PeekById(String) zawsze zwraca pierwszy komunikat w kolejce, więc kolejne wywołania metody zwracają ten sam komunikat, chyba że w kolejce pojawi się komunikat o wyższym priorytcie.

W poniższej tabeli przedstawiono, czy ta metoda jest dostępna w różnych trybach grupy roboczej.

Tryb grupy roboczej Dostępne
Komputer lokalny Tak
Komputer lokalny i nazwa formatu bezpośredniego Tak
Komputer zdalny Nie
Nazwa komputera zdalnego i formatu bezpośredniego Tak

Zobacz też

Dotyczy

ReceiveById(String, MessageQueueTransaction)

Odbiera komunikat zgodny z danym identyfikatorem (z kolejki transakcyjnej) i natychmiast zgłasza wyjątek, jeśli w kolejce nie istnieje żaden komunikat o określonym identyfikatorze.

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

Parametry

id
String

Komunikat Id do odebrania.

Zwraca

Message

Właściwość, której Id właściwość jest zgodna Message z przekazanym parametremid.

Wyjątki

Parametr id ma wartość null.

-lub- Parametr transaction ma wartość null.

Nie można odnaleźć komunikatu o określonej wartości id .

Kolejka nie jest transakcyjna.

-lub-

Wystąpił błąd podczas uzyskiwania dostępu do metody kolejkowania komunikatów.

Przykłady

W poniższym przykładzie kodu pokazano użycie metody 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();
}

Uwagi

Użyj tej metody, aby odczytać komunikat ze znanym identyfikatorem i usunąć go z kolejki przy użyciu wewnętrznego kontekstu transakcji zdefiniowanego transaction przez parametr . Ta metoda zgłasza wyjątek natychmiast, jeśli komunikat nie znajduje się w kolejce

Właściwość Id komunikatu jest unikatowa w przedsiębiorstwie kolejkowania komunikatów, więc w kolejce będzie co najwyżej jeden komunikat zgodny z danym id parametrem.

Ponieważ ta metoda jest wywoływana w kolejce transakcyjnej, komunikat, który zostanie odebrany, zostanie zwrócony do kolejki, jeśli transakcja zostanie przerwana. Komunikat nie zostanie trwale usunięty z kolejki, dopóki transakcja nie zostanie zatwierdzona.

Dwie inne metody umożliwiają odbieranie komunikatów z kolejki. Metoda Receive zwraca pierwszy komunikat w kolejce, a ReceiveByCorrelationId(String) metoda służy do pobierania potwierdzenia, raportu lub wygenerowanego przez aplikację komunikatu odpowiedzi, który został utworzony w wyniku komunikatu wysłanego do kolejki.

Aby odczytać komunikat o określonym identyfikatorze bez usunięcia go z kolejki, użyj PeekById(String) metody . Metoda PeekById(String) zawsze zwraca pierwszy komunikat w kolejce, więc kolejne wywołania metody zwracają ten sam komunikat, chyba że w kolejce pojawi się komunikat o wyższym priorytcie. Brak kontekstu transakcji skojarzonego z komunikatem zwróconym przez wywołanie metody PeekById(String). Ponieważ PeekById(String) nie usuwa żadnych komunikatów w kolejce, nie byłoby nic do wycofywania, jeśli transakcja została przerwana.

W poniższej tabeli przedstawiono, czy ta metoda jest dostępna w różnych trybach grupy roboczej.

Tryb grupy roboczej Dostępne
Komputer lokalny Tak
Nazwa komputera lokalnego i bezpośredniego formatu Tak
Komputer zdalny Nie
Nazwa komputera zdalnego i bezpośredniego formatu Tak

Zobacz też

Dotyczy

ReceiveById(String, MessageQueueTransactionType)

Odbiera komunikat zgodny z danym identyfikatorem i natychmiast zgłasza wyjątek, jeśli w kolejce nie istnieje żaden komunikat o określonym identyfikatorze.

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

Parametry

id
String

Komunikat Id do odebrania.

transactionType
MessageQueueTransactionType

MessageQueueTransactionType Jedna z wartości opisujących typ kontekstu transakcji do skojarzenia z komunikatem.

Zwraca

Message

Właściwość Message , której Id pasuje do przekazanego parametru id .

Wyjątki

Parametr id ma wartość null.

Nie można odnaleźć komunikatu o określonej wartości id .

Parametr transactionType nie jest jednym z MessageQueueTransactionType elementów członkowskich.

Wystąpił błąd podczas uzyskiwania dostępu do metody kolejkowania komunikatów.

Przykłady

W poniższym przykładzie kodu pokazano użycie metody 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);

Uwagi

Ta metoda służy do odczytywania komunikatu ze znanym identyfikatorem i usuwania go z kolejki. Ta metoda zgłasza wyjątek natychmiast, jeśli komunikat nie znajduje się w kolejce. W przeciwnym razie komunikat zostanie usunięty z kolejki i zwrócony do aplikacji przy użyciu kontekstu transakcji zdefiniowanego transactionType przez parametr .

Określ Automatic parametr , transactionType jeśli istnieje już zewnętrzny kontekst transakcji dołączony do wątku, którego chcesz użyć do odbierania komunikatu. Określ Single , czy chcesz otrzymywać komunikat jako pojedynczą transakcję wewnętrzną. Możesz określić None , czy chcesz odbierać komunikat z kolejki transakcyjnej poza kontekstem transakcji.

Id Właściwość komunikatu jest unikatowa w całym przedsiębiorstwie kolejkowania komunikatów, więc w kolejce będzie co najwyżej jeden komunikat zgodny z danym id parametrem. Jeśli komunikat o określonym identyfikatorze znajduje się w kolejce innej niż ta skojarzona z tym MessageQueue wystąpieniem, komunikat nie zostanie znaleziony.

Jeśli ta metoda jest wywoływana w celu odbierania komunikatu z kolejki transakcyjnej, odebrany komunikat zostanie zwrócony do kolejki, jeśli transakcja zostanie przerwana. Komunikat nie zostanie trwale usunięty z kolejki, dopóki transakcja nie zostanie zatwierdzona.

Dwie inne metody umożliwiają odbieranie komunikatów z kolejki. Metoda Receive zwraca pierwszy komunikat w kolejce, a ReceiveByCorrelationId(String) metoda służy do pobierania potwierdzenia, raportu lub komunikatu odpowiedzi wygenerowanego przez aplikację, który został utworzony w wyniku komunikatu wysłanego do kolejki.

Aby odczytać komunikat z określonym identyfikatorem bez usuwania go z kolejki, użyj PeekById(String) metody . Metoda PeekById(String) zawsze zwraca pierwszy komunikat w kolejce, więc kolejne wywołania metody zwracają ten sam komunikat, chyba że komunikat o wyższym priorycie zostanie dostarczony do kolejki. Brak kontekstu transakcji skojarzonego z komunikatem zwróconym przez wywołanie metody PeekById(String). Ponieważ PeekById(String) nie usuwa żadnych komunikatów w kolejce, nie byłoby nic do wycofywania, jeśli transakcja została przerwana.

W poniższej tabeli przedstawiono, czy ta metoda jest dostępna w różnych trybach grupy roboczej.

Tryb grupy roboczej Dostępne
Komputer lokalny Tak
Nazwa komputera lokalnego i bezpośredniego formatu Tak
Komputer zdalny Nie
Nazwa komputera zdalnego i bezpośredniego formatu Tak

Zobacz też

Dotyczy

ReceiveById(String, TimeSpan)

Odbiera komunikat zgodny z danym identyfikatorem (z kolejki nie transakcyjnej) i czeka, aż komunikat o określonym identyfikatorze będzie dostępny w kolejce lub upłynął limit czasu.

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

Parametry

id
String

Komunikat Id do odebrania.

timeout
TimeSpan

Element TimeSpan wskazujący czas oczekiwania na udostępnienie nowej wiadomości na potrzeby inspekcji.

Zwraca

Message

Właściwość Message , której Id pasuje do przekazanego parametru id .

Wyjątki

Parametr id ma wartość null.

Wartość określona dla parametru timeout jest nieprawidłowa, prawdopodobnie timeout jest mniejsza lub większa niż Zero InfiniteTimeout.

Komunikat z określoną id wartością nie dotarł do kolejki przed upływem limitu czasu.

-lub- Wystąpił błąd podczas uzyskiwania dostępu do metody kolejkowania komunikatów.

Przykłady

W poniższym przykładzie kodu pokazano użycie metody 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));

Uwagi

Ta metoda służy do odczytywania komunikatu ze znanym identyfikatorem i usuwania go z kolejki. Ta metoda zwraca natychmiast, jeśli komunikat o identyfikatorze id określonym przez parametr znajduje się w kolejce. W przeciwnym razie metoda czeka na nadejście nowego komunikatu. Jeśli nowy komunikat nie pojawi się przed upływem limitu czasu, zostanie zgłoszony wyjątek.

Parametr timeout nie określa całkowitego czasu wykonywania dla tej metody. Zamiast tego określa czas oczekiwania na nadejście nowego komunikatu do kolejki. Za każdym razem, gdy pojawi się nowy komunikat, ta metoda analizuje Id komunikat, aby sprawdzić, czy jest on zgodny z parametrem id . Jeśli nie, ta metoda rozpoczyna limit czasu i czeka na nadejście kolejnego nowego komunikatu. W związku z tym, jeśli nowe komunikaty będą nadal docierać w okresie limitu czasu, jest możliwe, aby ta metoda kontynuowała działanie na czas nieokreślony, do momentu wygaśnięcia okresu przekroczenia limitu czasu bez nadejścia nowych komunikatów lub do momentu nadejścia komunikatu zgodnego Id z parametrem id .

Id Właściwość komunikatu jest unikatowa w całym przedsiębiorstwie kolejkowania komunikatów, więc w kolejce będzie co najwyżej jeden komunikat zgodny z danym id parametrem.

Tego przeciążenia ReceiveById(String) należy użyć, gdy jest dopuszczalne, aby bieżący wątek był blokowany tak długo, jak nowe komunikaty będą nadal docierać do kolejki w przedziale czasu określonym przez timeout parametr . Wątek zostanie zablokowany przez co najmniej dany okres czasu lub na czas nieokreślony, jeśli określono wartość InfiniteTimeout parametru timeout lub jeśli nowe komunikaty będą nadal docierać do kolejki w okresie limitu czasu określonym przez timeout parametr .

Dwie inne metody umożliwiają odbieranie komunikatów z kolejki. Metoda Receive zwraca pierwszy komunikat w kolejce, a ReceiveByCorrelationId(String) metoda służy do pobierania potwierdzenia, raportu lub komunikatu odpowiedzi wygenerowanego przez aplikację, który został utworzony w wyniku komunikatu wysłanego do kolejki.

Aby odczytać komunikat z określonym identyfikatorem bez usuwania go z kolejki, użyj PeekById(String) metody . Metoda PeekById(String) zawsze zwraca pierwszy komunikat w kolejce, więc kolejne wywołania metody zwracają ten sam komunikat, chyba że komunikat o wyższym priorycie zostanie dostarczony do kolejki.

W poniższej tabeli przedstawiono, czy ta metoda jest dostępna w różnych trybach grupy roboczej.

Tryb grupy roboczej Dostępne
Komputer lokalny Tak
Nazwa komputera lokalnego i bezpośredniego formatu Tak
Komputer zdalny Nie
Nazwa komputera zdalnego i bezpośredniego formatu Tak

Zobacz też

Dotyczy

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Odbiera komunikat zgodny z danym identyfikatorem (z kolejki transakcyjnej) i czeka, aż komunikat o określonym identyfikatorze będzie dostępny w kolejce lub upłynął limit czasu.

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

Parametry

id
String

Komunikat Id do odebrania.

timeout
TimeSpan

Element TimeSpan wskazujący czas oczekiwania na udostępnienie nowej wiadomości na potrzeby inspekcji.

Zwraca

Message

Właściwość Message , której Id pasuje do przekazanego parametru id .

Wyjątki

Parametr id to null.

-lub- Parametr transaction to null.

Wartość określona dla parametru timeout jest nieprawidłowa, prawdopodobnie timeout jest mniejsza lub większa niż Zero InfiniteTimeout.

Komunikat o określonej id godzinie nie dotarł do kolejki przed wygaśnięciem limitu czasu.

-lub- Kolejka nie jest transakcyjna.

-lub- Wystąpił błąd podczas uzyskiwania dostępu do metody kolejkowania komunikatów.

Przykłady

W poniższym przykładzie kodu pokazano użycie metody 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();
}

Uwagi

Ta metoda służy do odczytywania komunikatu ze znanym identyfikatorem i usuwania go z kolejki przy użyciu wewnętrznego kontekstu transakcji zdefiniowanego transaction przez parametr . Ta metoda zwraca natychmiast, jeśli komunikat o identyfikatorze id określonym przez parametr znajduje się w kolejce. W przeciwnym razie metoda czeka określony okres czasu na nadejście nowego komunikatu. Jeśli nowy komunikat nie zostanie wyświetlony przed wygaśnięciem limitu czasu, zostanie zgłoszony wyjątek.

Parametr timeout nie określa całkowitego czasu działania dla tej metody. Zamiast tego określa czas oczekiwania na nadejście nowego komunikatu do kolejki. Za każdym razem, gdy pojawi się nowy komunikat, ta metoda analizuje Id nowy komunikat, aby sprawdzić, czy jest zgodny z parametrem id . Jeśli tak nie jest, ta metoda rozpoczyna okres przekroczenia limitu czasu i czeka na nadejście kolejnego nowego komunikatu. W związku z tym, jeśli nowe komunikaty będą nadal docierać w okresie przekroczenia limitu czasu, ta metoda może kontynuować działanie na czas nieokreślony, do momentu wygaśnięcia limitu czasu bez nadejścia nowych komunikatów lub do momentu nadejścia komunikatu, którego Id parametr pasuje do parametru id .

Właściwość Id komunikatu jest unikatowa w przedsiębiorstwie kolejkowania komunikatów, więc w kolejce będzie co najwyżej jeden komunikat zgodny z danym id parametrem.

Użyj tego przeciążenia, ReceiveById(String) gdy jest dopuszczalne, aby bieżący wątek był blokowany tak długo, jak nowe komunikaty będą nadal docierać do kolejki w przedziale czasu określonym przez timeout parametr . Wątek zostanie zablokowany przez co najmniej dany okres czasu lub na czas nieokreślony, jeśli określono wartość InfiniteTimeout parametru timeout , lub jeśli nowe komunikaty będą nadal docierać do kolejki w przedziale czasu określonym przez timeout parametr .

Ponieważ ta metoda jest wywoływana w kolejce transakcyjnej, komunikat, który zostanie odebrany, zostanie zwrócony do kolejki, jeśli transakcja zostanie przerwana. Komunikat nie zostanie trwale usunięty z kolejki, dopóki transakcja nie zostanie zatwierdzona.

Dwie inne metody umożliwiają odbieranie komunikatów z kolejki. Metoda Receive zwraca pierwszy komunikat w kolejce, a ReceiveByCorrelationId(String) metoda służy do pobierania potwierdzenia, raportu lub wygenerowanego przez aplikację komunikatu odpowiedzi, który został utworzony w wyniku komunikatu wysłanego do kolejki.

Aby odczytać komunikat o określonym identyfikatorze bez usunięcia go z kolejki, użyj PeekById(String) metody . Metoda PeekById(String) zawsze zwraca pierwszy komunikat w kolejce, więc kolejne wywołania metody zwracają ten sam komunikat, chyba że w kolejce pojawi się komunikat o wyższym priorytcie. Nie ma kontekstu transakcji skojarzonego z komunikatem zwróconym przez wywołanie metody PeekById(String). Ponieważ PeekById(String) nie usuwa żadnych komunikatów w kolejce, nie byłoby nic do wycofania, gdyby transakcja została przerwana.

W poniższej tabeli przedstawiono, czy ta metoda jest dostępna w różnych trybach grupy roboczej.

Tryb grupy roboczej Dostępne
Komputer lokalny Tak
Komputer lokalny i nazwa formatu bezpośredniego Tak
Komputer zdalny Nie
Nazwa komputera zdalnego i formatu bezpośredniego Tak

Zobacz też

Dotyczy

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Odbiera komunikat zgodny z danym identyfikatorem i czeka aż komunikat o określonym identyfikatorze będzie dostępny w kolejce lub upłynął limit czasu.

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

Parametry

id
String

Komunikat Id do odebrania.

timeout
TimeSpan

Element TimeSpan wskazujący czas oczekiwania na udostępnienie nowej wiadomości do kontroli.

transactionType
MessageQueueTransactionType

MessageQueueTransactionType Jedna z wartości opisujących typ kontekstu transakcji do skojarzenia z komunikatem.

Zwraca

Message

Właściwość, której Id właściwość jest zgodna Message z przekazanym parametremid.

Wyjątki

Parametr id to null.

Wartość określona dla parametru timeout jest nieprawidłowa, prawdopodobnie timeout jest mniejsza lub większa niż Zero InfiniteTimeout.

Komunikat o określonej id godzinie nie dotarł do kolejki przed wygaśnięciem limitu czasu.

-lub- Wystąpił błąd podczas uzyskiwania dostępu do metody kolejkowania komunikatów.

Parametr transactionType nie jest jednym z MessageQueueTransactionType elementów członkowskich.

Przykłady

W poniższym przykładzie kodu pokazano użycie metody 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);

Uwagi

Użyj tej metody, aby odczytać komunikat ze znanym identyfikatorem i usunąć go z kolejki. Ta metoda zwraca natychmiast, jeśli komunikat o identyfikatorze id określonym przez parametr znajduje się w kolejce przy użyciu kontekstu transakcji zdefiniowanego transactionType przez parametr . W przeciwnym razie metoda czeka określony okres czasu na nadejście nowego komunikatu. Jeśli nowy komunikat nie zostanie wyświetlony przed wygaśnięciem limitu czasu, zostanie zgłoszony wyjątek.

Parametr timeout nie określa całkowitego czasu działania dla tej metody. Zamiast tego określa czas oczekiwania na nadejście nowego komunikatu do kolejki. Za każdym razem, gdy pojawi się nowy komunikat, ta metoda analizuje Id nowy komunikat, aby sprawdzić, czy jest zgodny z parametrem id . Jeśli tak nie jest, ta metoda rozpoczyna okres przekroczenia limitu czasu i czeka na nadejście kolejnego nowego komunikatu. W związku z tym, jeśli nowe komunikaty będą nadal docierać w okresie przekroczenia limitu czasu, ta metoda może kontynuować działanie na czas nieokreślony, do momentu wygaśnięcia limitu czasu bez nadejścia nowych komunikatów lub do momentu nadejścia komunikatu, którego Id parametr pasuje do parametru id .

Określ Automatic parametr, transactionType jeśli istnieje już zewnętrzny kontekst transakcji dołączony do wątku, którego chcesz użyć do odbierania komunikatu. Określ Single , czy chcesz otrzymywać komunikat jako pojedynczą transakcję wewnętrzną. Możesz określić None , czy chcesz otrzymywać komunikat z kolejki transakcyjnej poza kontekstem transakcji.

Właściwość Id komunikatu jest unikatowa w przedsiębiorstwie kolejkowania komunikatów, więc w kolejce będzie co najwyżej jeden komunikat zgodny z danym id parametrem. Jeśli komunikat o określonym identyfikatorze znajduje się w kolejce innej niż ta skojarzona z tym MessageQueue wystąpieniem, komunikat nie zostanie znaleziony.

Użyj tego przeciążenia, ReceiveById(String) gdy jest dopuszczalne, aby bieżący wątek był blokowany tak długo, jak nowe komunikaty będą nadal docierać do kolejki w przedziale czasu określonym przez timeout parametr . Wątek zostanie zablokowany przez co najmniej dany okres czasu lub na czas nieokreślony, jeśli określono wartość InfiniteTimeout parametru timeout , lub jeśli nowe komunikaty będą nadal docierać do kolejki w przedziale czasu określonym przez timeout parametr .

Jeśli ta metoda jest wywoływana w celu odebrania komunikatu z kolejki transakcyjnej, komunikat, który zostanie odebrany, zostanie zwrócony do kolejki, jeśli transakcja zostanie przerwana. Komunikat nie zostanie trwale usunięty z kolejki, dopóki transakcja nie zostanie zatwierdzona.

Dwie inne metody umożliwiają odbieranie komunikatów z kolejki. Metoda Receive zwraca pierwszy komunikat w kolejce, a ReceiveByCorrelationId(String) metoda służy do pobierania potwierdzenia, raportu lub wygenerowanego przez aplikację komunikatu odpowiedzi, który został utworzony w wyniku komunikatu wysłanego do kolejki.

Aby odczytać komunikat o określonym identyfikatorze bez usunięcia go z kolejki, użyj PeekById(String) metody . Metoda PeekById(String) zawsze zwraca pierwszy komunikat w kolejce, więc kolejne wywołania metody zwracają ten sam komunikat, chyba że w kolejce pojawi się komunikat o wyższym priorytcie. Nie ma kontekstu transakcji skojarzonego z komunikatem zwróconym przez wywołanie metody PeekById(String). Ponieważ PeekById(String) nie usuwa żadnych komunikatów w kolejce, nie byłoby nic do wycofania, gdyby transakcja została przerwana.

W poniższej tabeli przedstawiono, czy ta metoda jest dostępna w różnych trybach grupy roboczej.

Tryb grupy roboczej Dostępne
Komputer lokalny Tak
Komputer lokalny i nazwa formatu bezpośredniego Tak
Komputer zdalny Nie
Nazwa komputera zdalnego i formatu bezpośredniego Tak

Zobacz też

Dotyczy