MessageQueue.ReceiveById Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přijme zprávu, která odpovídá danému identifikátoru, a odebere ho z fronty.
Přetížení
ReceiveById(String) |
Přijme zprávu, která odpovídá danému identifikátoru z neakční fronty, a okamžitě vyvolá výjimku, pokud ve frontě aktuálně neexistuje žádná zpráva se zadaným identifikátorem. |
ReceiveById(String, MessageQueueTransaction) |
Přijme zprávu, která odpovídá danému identifikátoru (z transakční fronty), a okamžitě vyvolá výjimku, pokud ve frontě aktuálně neexistuje žádná zpráva se zadaným identifikátorem. |
ReceiveById(String, MessageQueueTransactionType) |
Přijme zprávu, která odpovídá danému identifikátoru, a okamžitě vyvolá výjimku, pokud ve frontě aktuálně neexistuje žádná zpráva se zadaným identifikátorem. |
ReceiveById(String, TimeSpan) |
Přijme zprávu, která odpovídá danému identifikátoru (z neakční fronty), a počká, dokud nebude zpráva se zadaným identifikátorem k dispozici ve frontě nebo časový limit vyprší. |
ReceiveById(String, TimeSpan, MessageQueueTransaction) |
Přijme zprávu, která odpovídá danému identifikátoru (z transakční fronty), a počká, dokud nebude ve frontě k dispozici zpráva se zadaným identifikátorem nebo časový limit vyprší. |
ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
Přijme zprávu, která odpovídá danému identifikátoru, a počká, dokud nebude zpráva se zadaným identifikátorem k dispozici ve frontě nebo dokud nevyprší časový limit. |
ReceiveById(String)
Přijme zprávu, která odpovídá danému identifikátoru z neakční fronty, a okamžitě vyvolá výjimku, pokud ve frontě aktuálně neexistuje žádná zpráva se zadaným identifikátorem.
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
Návraty
Id Jehož Message vlastnost odpovídá předaný id
parametr.
Výjimky
Parametr id
je null
.
Zpráva se zadaným id
parametrem nebyla nalezena.
Při přístupu k metodě služby Řízení front zpráv došlo k chybě.
Příklady
Následující příklad kódu ukazuje použití .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);
Poznámky
Pomocí této metody můžete přečíst zprávu se známým identifikátorem a odebrat ji z fronty. Tato metoda vyvolá výjimku okamžitě, pokud zpráva není ve frontě.
Vlastnost Id zprávy je v rámci služby Řízení front zpráv jedinečná, takže ve frontě bude nejvýše jedna zpráva, která odpovídá danému id
parametru.
Dvě další metody umožňují přijímat zprávy z fronty. Metoda Receive vrátí první zprávu ve frontě a ReceiveByCorrelationId(String) metoda se používá k načtení potvrzení, sestavy nebo zprávy odpovědi vygenerované aplikací, které byly vytvořeny jako výsledek zprávy odeslané do fronty.
Pokud chcete přečíst zprávu se zadaným identifikátorem, aniž byste ji odebrali z fronty, použijte metodu PeekById(String) . Metoda PeekById(String) vždy vrátí první zprávu ve frontě, takže další volání metody vrátí stejnou zprávu, pokud do fronty nedorazí zpráva s vyšší prioritou.
Následující tabulka ukazuje, zda je tato metoda k dispozici v různých režimech pracovní skupiny.
Režim pracovní skupiny | K dispozici. |
---|---|
Místní počítač | Yes |
Název místního počítače a přímého formátu | Yes |
Vzdálený počítač | No |
Název vzdáleného počítače a přímého formátu | Yes |
Viz také
Platí pro
ReceiveById(String, MessageQueueTransaction)
Přijme zprávu, která odpovídá danému identifikátoru (z transakční fronty), a okamžitě vyvolá výjimku, pokud ve frontě aktuálně neexistuje žádná zpráva se zadaným identifikátorem.
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
Objekt MessageQueueTransaction
Návraty
Id Jehož Message vlastnost odpovídá předaný id
parametr.
Výjimky
Zpráva se zadaným id
parametrem nebyla nalezena.
Fronta není transakční.
-nebo-
Při přístupu k metodě služby Řízení front zpráv došlo k chybě.
Příklady
Následující příklad kódu ukazuje použití .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();
}
Poznámky
Tuto metodu použijte ke čtení zprávy se známým identifikátorem a k jejímu odebrání z fronty pomocí kontextu interní transakce definovaného parametrem transaction
. Tato metoda vyvolá výjimku okamžitě, pokud zpráva není ve frontě.
Vlastnost Id zprávy je v rámci služby Řízení front zpráv jedinečná, takže ve frontě bude nejvýše jedna zpráva, která odpovídá danému id
parametru.
Vzhledem k tomu, že tato metoda je volána v transakční frontě, zpráva, která je přijata, bude vrácena do fronty, pokud transakce je přerušena. Zpráva není trvale odebrána z fronty, dokud transakce není potvrzena.
Dvě další metody umožňují přijímat zprávy z fronty. Metoda Receive vrátí první zprávu ve frontě a ReceiveByCorrelationId(String) metoda se používá k načtení potvrzení, sestavy nebo zprávy odpovědi vygenerované aplikací, které byly vytvořeny jako výsledek zprávy odeslané do fronty.
Pokud chcete přečíst zprávu se zadaným identifikátorem, aniž byste ji odebrali z fronty, použijte metodu PeekById(String) . Metoda PeekById(String) vždy vrátí první zprávu ve frontě, takže další volání metody vrátí stejnou zprávu, pokud do fronty nedorazí zpráva s vyšší prioritou. Ke zprávě vrácené voláním PeekById(String)není přidružen žádný kontext transakce. Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebylo by nic vrátit zpět, pokud transakce byla přerušena.
Následující tabulka ukazuje, zda je tato metoda k dispozici v různých režimech pracovní skupiny.
Režim pracovní skupiny | K dispozici. |
---|---|
Místní počítač | Yes |
Název místního počítače a přímého formátu | Yes |
Vzdálený počítač | No |
Název vzdáleného počítače a přímého formátu | Yes |
Viz také
Platí pro
ReceiveById(String, MessageQueueTransactionType)
Přijme zprávu, která odpovídá danému identifikátoru, a okamžitě vyvolá výjimku, pokud ve frontě aktuálně neexistuje žádná zpráva se zadaným identifikátorem.
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
Jedna z MessageQueueTransactionType hodnot popisující typ kontextu transakce, který se má přidružit ke zprávě.
Návraty
Id Jehož Message vlastnost odpovídá předaný id
parametr.
Výjimky
Parametr id
je null
.
Zpráva se zadaným id
parametrem nebyla nalezena.
Parametr transactionType
není jedním ze MessageQueueTransactionType členů.
Při přístupu k metodě služby Řízení front zpráv došlo k chybě.
Příklady
Následující příklad kódu ukazuje použití .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);
Poznámky
Pomocí této metody můžete přečíst zprávu se známým identifikátorem a odebrat ji z fronty. Tato metoda vyvolá výjimku okamžitě, pokud zpráva není ve frontě. Jinak se zpráva odebere z fronty a vrátí aplikaci pomocí kontextu transakce definovaného parametrem transactionType
.
Zadejte Automatic
jako transactionType
parametr, pokud již existuje kontext externí transakce připojený k vláknu, které chcete použít k přijetí zprávy. Určete Single
, zda chcete zprávu přijmout jako jednu interní transakci. Můžete určit None
, zda chcete přijímat zprávu z transakční fronty mimo kontext transakce.
Vlastnost Id zprávy je v rámci služby Řízení front zpráv jedinečná, takže ve frontě bude nejvýše jedna zpráva, která odpovídá danému id
parametru. Pokud je zpráva se zadaným identifikátorem ve frontě jiné než ta, která je přidružená k této MessageQueue instanci, zpráva nebude nalezena.
Pokud je tato metoda volána k přijetí zprávy z transakční fronty, zpráva, která je přijata, bude vrácena do fronty, pokud transakce je přerušena. Zpráva není trvale odebrána z fronty, dokud transakce není potvrzena.
Dvě další metody umožňují přijímat zprávy z fronty. Metoda Receive vrátí první zprávu ve frontě a ReceiveByCorrelationId(String) metoda se používá k načtení potvrzení, sestavy nebo zprávy odpovědi vygenerované aplikací, které byly vytvořeny jako výsledek zprávy odeslané do fronty.
Pokud chcete přečíst zprávu se zadaným identifikátorem, aniž byste ji odebrali z fronty, použijte metodu PeekById(String) . Metoda PeekById(String) vždy vrátí první zprávu ve frontě, takže další volání metody vrátí stejnou zprávu, pokud do fronty nedorazí zpráva s vyšší prioritou. Ke zprávě vrácené voláním PeekById(String)není přidružen žádný kontext transakce. Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebylo by nic vrátit zpět, pokud transakce byla přerušena.
Následující tabulka ukazuje, zda je tato metoda k dispozici v různých režimech pracovní skupiny.
Režim pracovní skupiny | K dispozici. |
---|---|
Místní počítač | Yes |
Název místního počítače a přímého formátu | Yes |
Vzdálený počítač | No |
Název vzdáleného počítače a přímého formátu | Yes |
Viz také
Platí pro
ReceiveById(String, TimeSpan)
Přijme zprávu, která odpovídá danému identifikátoru (z neakční fronty), a počká, dokud nebude zpráva se zadaným identifikátorem k dispozici ve frontě nebo časový limit vyprší.
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
Hodnota TimeSpan označující dobu čekání, než bude k dispozici nová zpráva pro kontrolu.
Návraty
Id Jehož Message vlastnost odpovídá předaný id
parametr.
Výjimky
Parametr id
je null
.
Hodnota zadaná pro timeout
parametr není platná, pravděpodobně timeout
je menší než Zero nebo větší než InfiniteTimeout.
Zpráva se zadaným id
parametrem nepřišla do fronty před vypršením časového limitu.
-nebo-
Při přístupu k metodě služby Řízení front zpráv došlo k chybě.
Příklady
Následující příklad kódu ukazuje použití .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));
Poznámky
Pomocí této metody můžete přečíst zprávu se známým identifikátorem a odebrat ji z fronty. Tato metoda vrátí okamžitě, pokud je zpráva s identifikátorem určeným parametrem id
ve frontě. V opačném případě metoda počká danou dobu na doručení nové zprávy. Pokud nová zpráva nedorazí před vypršením časového limitu, vyvolá se výjimka.
Parametr timeout
neurčuje celkovou dobu spuštění pro tuto metodu. Místo toho určuje dobu čekání na doručení nové zprávy do fronty. Při každém přijetí nové zprávy tato metoda zkontroluje Id hodnotu nové zprávy a zjistí, jestli odpovídá parametru id
. Pokud ne, spustí tato metoda časový limit po uplynutí a počká na přijetí další nové zprávy. Proto pokud nové zprávy nadále dorazí v rámci časového limitu, je možné, aby tato metoda běžela po neomezenou dobu, buď až do vypršení časového limitu bez příchodu nových zpráv, nebo do příchodu zprávy, jejíž Id odpovídá parametru id
.
Vlastnost Id zprávy je v rámci služby Řízení front zpráv jedinečná, takže ve frontě bude nejvýše jedna zpráva, která odpovídá danému id
parametru.
Toto přetížení ReceiveById(String) použijte, pokud je přijatelné, aby aktuální vlákno bylo blokováno, pokud nové zprávy budou nadále docházet do fronty v rámci časového limitu určeného parametrem timeout
. Vlákno bude blokováno alespoň po danou dobu nebo na neomezenou dobu, pokud jste zadali hodnotu InfiniteTimeout parametru timeout
, nebo pokud nové zprávy budou nadále docházet do fronty v rámci časového limitu určeného parametrem timeout
.
Dvě další metody umožňují přijímat zprávy z fronty. Metoda Receive vrátí první zprávu ve frontě a ReceiveByCorrelationId(String) metoda se používá k načtení potvrzení, sestavy nebo zprávy odpovědi vygenerované aplikací, které byly vytvořeny jako výsledek zprávy odeslané do fronty.
Pokud chcete přečíst zprávu se zadaným identifikátorem, aniž byste ji odebrali z fronty, použijte metodu PeekById(String) . Metoda PeekById(String) vždy vrátí první zprávu ve frontě, takže další volání metody vrátí stejnou zprávu, pokud do fronty nedorazí zpráva s vyšší prioritou.
Následující tabulka ukazuje, zda je tato metoda k dispozici v různých režimech pracovní skupiny.
Režim pracovní skupiny | K dispozici. |
---|---|
Místní počítač | Yes |
Název místního počítače a přímého formátu | Yes |
Vzdálený počítač | No |
Název vzdáleného počítače a přímého formátu | Yes |
Viz také
Platí pro
ReceiveById(String, TimeSpan, MessageQueueTransaction)
Přijme zprávu, která odpovídá danému identifikátoru (z transakční fronty), a počká, dokud nebude ve frontě k dispozici zpráva se zadaným identifikátorem nebo časový limit vyprší.
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
Hodnota TimeSpan označující dobu čekání, než bude k dispozici nová zpráva pro kontrolu.
- transaction
- MessageQueueTransaction
Objekt MessageQueueTransaction
Návraty
Id Jehož Message vlastnost odpovídá předaný id
parametr.
Výjimky
Hodnota zadaná pro timeout
parametr není platná, pravděpodobně timeout
je menší než Zero nebo větší než InfiniteTimeout.
Zpráva se zadaným id
parametrem nepřišla do fronty před vypršením časového limitu.
-nebo-
Fronta není transakční.
-nebo-
Při přístupu k metodě služby Řízení front zpráv došlo k chybě.
Příklady
Následující příklad kódu ukazuje použití .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();
}
Poznámky
Tuto metodu použijte ke čtení zprávy se známým identifikátorem a k jejímu odebrání z fronty pomocí kontextu interní transakce definovaného parametrem transaction
. Tato metoda vrátí okamžitě, pokud je zpráva s identifikátorem určeným parametrem id
ve frontě. V opačném případě metoda počká danou dobu na doručení nové zprávy. Pokud nová zpráva nedorazí před vypršením časového limitu, vyvolá se výjimka.
Parametr timeout
neurčuje celkovou dobu spuštění pro tuto metodu. Místo toho určuje dobu čekání na doručení nové zprávy do fronty. Při každém přijetí nové zprávy tato metoda zkontroluje Id hodnotu nové zprávy a zjistí, jestli odpovídá parametru id
. Pokud ne, spustí tato metoda časový limit po uplynutí a počká na přijetí další nové zprávy. Proto pokud nové zprávy nadále dorazí v rámci časového limitu, je možné, aby tato metoda běžela po neomezenou dobu, buď až do vypršení časového limitu bez příchodu nových zpráv, nebo do příchodu zprávy, jejíž Id odpovídá parametru id
.
Vlastnost Id zprávy je v rámci služby Řízení front zpráv jedinečná, takže ve frontě bude nejvýše jedna zpráva, která odpovídá danému id
parametru.
Toto přetížení ReceiveById(String) použijte, pokud je přijatelné, aby aktuální vlákno bylo blokováno, pokud nové zprávy budou nadále docházet do fronty v rámci časového limitu určeného parametrem timeout
. Vlákno bude blokováno alespoň po danou dobu nebo na neomezenou dobu, pokud jste zadali hodnotu InfiniteTimeout parametru timeout
, nebo pokud nové zprávy budou nadále docházet do fronty v rámci časového limitu určeného timeout
parametrem.
Vzhledem k tomu, že tato metoda je volána v transakční frontě, zpráva, která je přijata, bude vrácena do fronty, pokud transakce je přerušena. Zpráva není trvale odebrána z fronty, dokud transakce není potvrzena.
Dvě další metody umožňují přijímat zprávy z fronty. Metoda Receive vrátí první zprávu ve frontě a ReceiveByCorrelationId(String) metoda se používá k načtení potvrzení, sestavy nebo zprávy odpovědi vygenerované aplikací, které byly vytvořeny jako výsledek zprávy odeslané do fronty.
Pokud chcete přečíst zprávu se zadaným identifikátorem, aniž byste ji odebrali z fronty, použijte metodu PeekById(String) . Metoda PeekById(String) vždy vrátí první zprávu ve frontě, takže další volání metody vrátí stejnou zprávu, pokud do fronty nedorazí zpráva s vyšší prioritou. Ke zprávě vrácené voláním PeekById(String)není přidružen žádný kontext transakce. Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebylo by nic vrátit zpět, pokud transakce byla přerušena.
Následující tabulka ukazuje, zda je tato metoda k dispozici v různých režimech pracovní skupiny.
Režim pracovní skupiny | K dispozici. |
---|---|
Místní počítač | Yes |
Název místního počítače a přímého formátu | Yes |
Vzdálený počítač | No |
Název vzdáleného počítače a přímého formátu | Yes |
Viz také
Platí pro
ReceiveById(String, TimeSpan, MessageQueueTransactionType)
Přijme zprávu, která odpovídá danému identifikátoru, a počká, dokud nebude zpráva se zadaným identifikátorem k dispozici ve frontě nebo dokud nevyprší časový limit.
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
Hodnota TimeSpan označující dobu čekání, než bude k dispozici nová zpráva pro kontrolu.
- transactionType
- MessageQueueTransactionType
Jedna z MessageQueueTransactionType hodnot popisující typ kontextu transakce, který se má přidružit ke zprávě.
Návraty
Id Jehož Message vlastnost odpovídá předaný id
parametr.
Výjimky
Parametr id
je null
.
Hodnota zadaná pro timeout
parametr není platná, pravděpodobně timeout
je menší než Zero nebo větší než InfiniteTimeout.
Zpráva se zadaným id
parametrem nepřišla do fronty před vypršením časového limitu.
-nebo-
Při přístupu k metodě služby Řízení front zpráv došlo k chybě.
Parametr transactionType
není jedním ze MessageQueueTransactionType členů.
Příklady
Následující příklad kódu ukazuje použití .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);
Poznámky
Pomocí této metody můžete přečíst zprávu se známým identifikátorem a odebrat ji z fronty. Tato metoda vrátí okamžitě, pokud zpráva s identifikátorem určeným parametrem id
je ve frontě pomocí kontextu transakce definovaného parametrem transactionType
. V opačném případě metoda počká danou dobu na doručení nové zprávy. Pokud nová zpráva nedorazí před vypršením časového limitu, vyvolá se výjimka.
Parametr timeout
neurčuje celkovou dobu spuštění pro tuto metodu. Místo toho určuje dobu čekání na doručení nové zprávy do fronty. Při každém přijetí nové zprávy tato metoda zkontroluje Id hodnotu nové zprávy a zjistí, jestli odpovídá parametru id
. Pokud ne, spustí tato metoda časový limit po uplynutí a počká na přijetí další nové zprávy. Proto pokud nové zprávy nadále dorazí v rámci časového limitu, je možné, aby tato metoda běžela po neomezenou dobu, buď až do vypršení časového limitu bez příchodu nových zpráv, nebo do příchodu zprávy, jejíž Id odpovídá parametru id
.
Zadejte Automatic
jako transactionType
parametr, pokud již existuje kontext externí transakce připojený k vláknu, které chcete použít k přijetí zprávy. Určete Single
, zda chcete zprávu přijmout jako jednu interní transakci. Můžete určit None
, zda chcete přijímat zprávu z transakční fronty mimo kontext transakce.
Vlastnost Id zprávy je v rámci služby Řízení front zpráv jedinečná, takže ve frontě bude nejvýše jedna zpráva, která odpovídá danému id
parametru. Pokud je zpráva se zadaným identifikátorem ve frontě jiné než ta, která je přidružená k této MessageQueue instanci, zpráva nebude nalezena.
Toto přetížení ReceiveById(String) použijte, pokud je přijatelné, aby aktuální vlákno bylo blokováno, pokud nové zprávy budou nadále docházet do fronty v rámci časového limitu určeného parametrem timeout
. Vlákno bude blokováno alespoň po danou dobu nebo na neomezenou dobu, pokud jste zadali hodnotu InfiniteTimeout parametru timeout
, nebo pokud nové zprávy budou nadále docházet do fronty v rámci časového limitu určeného parametrem timeout
.
Pokud je tato metoda volána k přijetí zprávy z transakční fronty, zpráva, která je přijata, bude vrácena do fronty, pokud transakce je přerušena. Zpráva není trvale odebrána z fronty, dokud transakce není potvrzena.
Dvě další metody umožňují přijímat zprávy z fronty. Metoda Receive vrátí první zprávu ve frontě a ReceiveByCorrelationId(String) metoda se používá k načtení potvrzení, sestavy nebo zprávy odpovědi vygenerované aplikací, které byly vytvořeny jako výsledek zprávy odeslané do fronty.
Pokud chcete přečíst zprávu se zadaným identifikátorem, aniž byste ji odebrali z fronty, použijte metodu PeekById(String) . Metoda PeekById(String) vždy vrátí první zprávu ve frontě, takže další volání metody vrátí stejnou zprávu, pokud do fronty nedorazí zpráva s vyšší prioritou. Ke zprávě vrácené voláním PeekById(String)není přidružen žádný kontext transakce. Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebylo by nic vrátit zpět, pokud transakce byla přerušena.
Následující tabulka ukazuje, zda je tato metoda k dispozici v různých režimech pracovní skupiny.
Režim pracovní skupiny | K dispozici. |
---|---|
Místní počítač | Yes |
Název místního počítače a přímého formátu | Yes |
Vzdálený počítač | No |
Název vzdáleného počítače a přímého formátu | Yes |