MessageQueue.ReceiveById Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Odbiera komunikat zgodny z danym identyfikatorem, usuwając go z kolejki.
Przeciążenia
ReceiveById(String) |
Odbiera komunikat zgodny z danym identyfikatorem z kolejki nie transakcyjnej 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 danym identyfikatorem z kolejki nie 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);
public System.Messaging.Message ReceiveById (string id);
member this.ReceiveById : string -> System.Messaging.Message
Public Function ReceiveById (id As String) As Message
Parametry
Zwraca
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
.
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
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.
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.
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, dlatego kolejne wywołania metody zwracają ten sam komunikat, chyba że komunikat o wyższym priorytcie pojawi się w kolejce.
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, 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
- transaction
- MessageQueueTransaction
Obiekt MessageQueueTransaction.
Zwraca
Właściwość Message , której Id pasuje do przekazanego parametru id
.
Wyjątki
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
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 zgłasza wyjątek natychmiast, jeśli komunikat nie znajduje się w kolejce
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.
Ponieważ ta metoda jest wywoływana w kolejce 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, dlatego kolejne wywołania metody zwracają ten sam komunikat, chyba że komunikat o wyższym priorytcie pojawi się w kolejce. 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
- transactionType
- MessageQueueTransactionType
MessageQueueTransactionType Jedna z wartości opisujących typ kontekstu transakcji do skojarzenia z komunikatem.
Zwraca
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, dlatego kolejne wywołania metody zwracają ten sam komunikat, chyba że komunikat o wyższym priorytcie pojawi się w kolejce. 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
- timeout
- TimeSpan
Element TimeSpan wskazujący czas oczekiwania na udostępnienie nowej wiadomości na potrzeby inspekcji.
Zwraca
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ż ZeroInfiniteTimeout.
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 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 przedziale 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, dlatego kolejne wywołania metody zwracają ten sam komunikat, chyba że komunikat o wyższym priorytcie pojawi się w kolejce.
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
- timeout
- TimeSpan
Element TimeSpan wskazujący czas oczekiwania na udostępnienie nowej wiadomości na potrzeby inspekcji.
- transaction
- MessageQueueTransaction
Obiekt MessageQueueTransaction.
Zwraca
Właściwość Message , której Id pasuje do przekazanego parametru id
.
Wyjątki
Wartość określona dla parametru timeout
jest nieprawidłowa, prawdopodobnie timeout
jest mniejsza lub większa niż ZeroInfiniteTimeout.
Komunikat z określoną id
wartością nie dotarł do kolejki przed upływem 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 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 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 przedziale czasu określonym przez timeout
parametr .
Ponieważ ta metoda jest wywoływana w kolejce 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, dlatego kolejne wywołania metody zwracają ten sam komunikat, chyba że w kolejce pojawi się komunikat o wyższym priorycie. 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, 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
- timeout
- TimeSpan
Element TimeSpan wskazujący czas oczekiwania na udostępnienie nowej wiadomości na potrzeby inspekcji.
- transactionType
- MessageQueueTransactionType
MessageQueueTransactionType Jedna z wartości opisujących typ kontekstu transakcji do skojarzenia z komunikatem.
Zwraca
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ż ZeroInfiniteTimeout.
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.
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
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 przy użyciu kontekstu transakcji zdefiniowanego transactionType
przez parametr . 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 limitu czasu bez nadejścia nowych komunikatów lub do momentu nadejścia komunikatu zgodnego Id z parametrem 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 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.
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 przedziale czasu określonym przez timeout
parametr .
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, dlatego kolejne wywołania metody zwracają ten sam komunikat, chyba że komunikat o wyższym priorytcie pojawi się w kolejce. 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 |