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 ji z fronty.
Přetížení
| Name | Description |
|---|---|
| ReceiveById(String) |
Přijme zprávu, která odpovídá danému identifikátoru z neaktuální 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 neaktuální fronty) a počká, až bude zpráva se zadaným identifikátorem k dispozici ve frontě nebo vyprší časový limit. |
| ReceiveById(String, TimeSpan, MessageQueueTransaction) |
Přijme zprávu, která odpovídá danému identifikátoru (z transakční fronty) a počká, dokud ve frontě není dostupná zpráva se zadaným identifikátorem nebo vyprší časový limit. |
| ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
Obdrží zprávu, která odpovídá danému identifikátoru, a počká, dokud nebude dostupná zpráva se zadaným identifikátorem ve frontě nebo vypršení časového limitu. |
ReceiveById(String)
Přijme zprávu, která odpovídá danému identifikátoru z neaktuální 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á parametru id předaného.
Výjimky
Parametr id je null.
Zpráva se zadanou id zprávou nebyla nalezena.
Při přístupu k metodě ří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 čí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 jedinečná v rámci organizace služby Řízení front zpráv, takže ve frontě bude maximálně 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í zprávy o potvrzení, sestavě nebo vygenerované aplikace, která byla vytvořena v důsledku 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 následná volání metody vrátí stejnou zprávu, pokud do fronty nepřijde 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č | Ano |
| Název místního počítače a přímého formátu | Ano |
| Vzdálený počítač | Ne |
| Název vzdáleného počítače a přímého formátu | Ano |
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á parametru id předaného.
Výjimky
Zpráva se zadanou id zprávou nebyla nalezena.
Fronta není transakční.
nebo
Při přístupu k metodě ří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
Pomocí této metody můžete číst zprávu se známým identifikátorem a odebrat ji z fronty pomocí interního kontextu transakce definovaného parametrem transaction . Tato metoda vyvolá výjimku okamžitě, pokud zpráva není ve frontě.
Vlastnost Id zprávy je jedinečná v rámci organizace služby Řízení front zpráv, takže ve frontě bude maximálně 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 přijatá by byla vrácena do fronty, pokud je transakce přerušena. Zpráva není trvale odebrána z fronty, dokud transakce nebude 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í zprávy o potvrzení, sestavě nebo vygenerované aplikace, která byla vytvořena v důsledku 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 následná volání metody vrátí stejnou zprávu, pokud do fronty nepřijde zpráva s vyšší prioritou. Neexistuje žádný kontext transakce spojený se zprávou vrácenou voláním PeekById(String). Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebude možné vrátit zpět, pokud by 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č | Ano |
| Název místního počítače a přímého formátu | Ano |
| Vzdálený počítač | Ne |
| Název vzdáleného počítače a přímého formátu | Ano |
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á parametru id předaného.
Výjimky
Parametr id je null.
Zpráva se zadanou id zprávou nebyla nalezena.
Parametr transactionType není jedním z MessageQueueTransactionType členů.
Při přístupu k metodě ří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 čí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í se do aplikace pomocí kontextu transakce definovaného parametrem transactionType .
Zadejte Automatic parametr transactionType , 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řijmout zprávu z transakční fronty mimo kontext transakce.
Vlastnost Id zprávy je jedinečná v rámci organizace služby Řízení front zpráv, takže ve frontě bude maximálně jedna zpráva, která odpovídá danému id parametru. Pokud je zpráva se zadaným identifikátorem v jiné frontě než zpráva přidružená k této MessageQueue instanci, zpráva se nenajde.
Pokud je tato metoda volána pro příjem zprávy z transakční fronty, zpráva přijatá by byla vrácena do fronty, pokud je transakce přerušena. Zpráva není trvale odebrána z fronty, dokud transakce nebude 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í zprávy o potvrzení, sestavě nebo vygenerované aplikace, která byla vytvořena v důsledku 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 následná volání metody vrátí stejnou zprávu, pokud do fronty nepřijde zpráva s vyšší prioritou. Neexistuje žádný kontext transakce spojený se zprávou vrácenou voláním PeekById(String). Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebude možné vrátit zpět, pokud by 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č | Ano |
| Název místního počítače a přímého formátu | Ano |
| Vzdálený počítač | Ne |
| Název vzdáleného počítače a přímého formátu | Ano |
Viz také
Platí pro
ReceiveById(String, TimeSpan)
Přijme zprávu, která odpovídá danému identifikátoru (z neaktuální fronty) a počká, až bude zpráva se zadaným identifikátorem k dispozici ve frontě nebo vyprší časový limit.
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
A TimeSpan , který označuje dobu čekání, až bude k dispozici nová zpráva pro kontrolu.
Návraty
Id Jehož Message vlastnost odpovídá parametru id předaného.
Výjimky
Parametr id je null.
Hodnota zadaná pro timeout parametr není platná, pravděpodobně timeout je menší nebo Zero větší než InfiniteTimeout.
Zpráva se zadanou id zprávou nebyla doručena do fronty před vypršením časového limitu.
nebo
Při přístupu k metodě ří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 číst zprávu se známým identifikátorem a odebrat ji z fronty. Tato metoda se vrátí okamžitě, pokud zpráva s identifikátorem určeným id parametrem je ve frontě. V opačném případě metoda počká na doručení nové zprávy v daném časovém období. Pokud nová zpráva nedorazí před vypršením časového limitu, vyvolá se výjimka.
Parametr timeout nezadá celkovou dobu běhu pro tuto metodu. Místo toho určuje dobu čekání na přijetí nové zprávy do fronty. Pokaždé, když přijde nová zpráva, tato metoda prozkoumá Id novou zprávu a zjistí, jestli odpovídá parametru id . Pokud ne, tato metoda spustí časové období vypršení časového limitu a čeká na doručení další nové zprávy. Proto pokud nové zprávy budou docházet v časovém limitu, je možné, aby tato metoda pokračovala po neomezenou dobu, a to buď do vypršení časového limitu, bez příchodu nových zpráv, nebo až do přijetí zprávy, jejíž Id odpovídá parametru id .
Vlastnost Id zprávy je jedinečná v rámci organizace služby Řízení front zpráv, takže ve frontě bude maximálně 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 doručovány do fronty během časového limitu určeného parametrem timeout . Vlákno bude blokováno alespoň na dané časové období nebo po neomezenou dobu, pokud jste zadali hodnotu InfiniteTimeout parametru timeout , nebo pokud nové zprávy budou do fronty pokračovat v časovém limitu určeném 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í zprávy o potvrzení, sestavě nebo vygenerované aplikace, která byla vytvořena v důsledku 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 následná volání metody vrátí stejnou zprávu, pokud do fronty nepřijde 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č | Ano |
| Název místního počítače a přímého formátu | Ano |
| Vzdálený počítač | Ne |
| Název vzdáleného počítače a přímého formátu | Ano |
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 ve frontě není dostupná zpráva se zadaným identifikátorem nebo vyprší časový limit.
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
A TimeSpan , který označuje dobu čekání, až bude k dispozici nová zpráva pro kontrolu.
- transaction
- MessageQueueTransaction
Objekt MessageQueueTransaction
Návraty
Id Jehož Message vlastnost odpovídá parametru id předaného.
Výjimky
Hodnota zadaná pro timeout parametr není platná, pravděpodobně timeout je menší nebo Zero větší než InfiniteTimeout.
Zpráva se zadanou id zprávou nebyla doručena do fronty před vypršením časového limitu.
nebo
Fronta není transakční.
nebo
Při přístupu k metodě ří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
Pomocí této metody můžete číst zprávu se známým identifikátorem a odebrat ji z fronty pomocí interního kontextu transakce definovaného parametrem transaction . Tato metoda se vrátí okamžitě, pokud zpráva s identifikátorem určeným id parametrem je ve frontě. V opačném případě metoda počká na doručení nové zprávy v daném časovém období. Pokud nová zpráva nedorazí před vypršením časového limitu, vyvolá se výjimka.
Parametr timeout nezadá celkovou dobu běhu pro tuto metodu. Místo toho určuje dobu čekání na přijetí nové zprávy do fronty. Pokaždé, když přijde nová zpráva, tato metoda prozkoumá Id novou zprávu a zjistí, jestli odpovídá parametru id . Pokud ne, tato metoda spustí časové období vypršení časového limitu a čeká na doručení další nové zprávy. Proto pokud nové zprávy budou docházet v časovém limitu, je možné, aby tato metoda pokračovala po neomezenou dobu, a to buď do vypršení časového limitu, bez příchodu nových zpráv, nebo až do přijetí zprávy, jejíž Id odpovídá parametru id .
Vlastnost Id zprávy je jedinečná v rámci organizace služby Řízení front zpráv, takže ve frontě bude maximálně 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 doručovány do fronty během časového limitu určeného parametrem timeout . Vlákno bude blokováno alespoň po danou dobu nebo po neomezenou dobu, pokud jste zadali hodnotu InfiniteTimeout parametru timeout nebo pokud nové zprávy budou nadále docházet do fronty během časového limitu určeného parametrem timeout .
Vzhledem k tomu, že tato metoda je volána v transakční frontě, zpráva přijatá by byla vrácena do fronty, pokud je transakce přerušena. Zpráva není trvale odebrána z fronty, dokud transakce nebude 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í zprávy o potvrzení, sestavě nebo vygenerované aplikace, která byla vytvořena v důsledku 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 následná volání metody vrátí stejnou zprávu, pokud do fronty nepřijde zpráva s vyšší prioritou. Neexistuje žádný kontext transakce spojený se zprávou vrácenou voláním PeekById(String). Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebude možné vrátit zpět, pokud by 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č | Ano |
| Název místního počítače a přímého formátu | Ano |
| Vzdálený počítač | Ne |
| Název vzdáleného počítače a přímého formátu | Ano |
Viz také
Platí pro
ReceiveById(String, TimeSpan, MessageQueueTransactionType)
Obdrží zprávu, která odpovídá danému identifikátoru, a počká, dokud nebude dostupná zpráva se zadaným identifikátorem ve frontě nebo vypršení časového limitu.
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
A TimeSpan , který označuje dobu čekání, až 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á parametru id předaného.
Výjimky
Parametr id je null.
Hodnota zadaná pro timeout parametr není platná, pravděpodobně timeout je menší nebo Zero větší než InfiniteTimeout.
Zpráva se zadanou id zprávou nebyla doručena do fronty před vypršením časového limitu.
nebo
Při přístupu k metodě řízení front zpráv došlo k chybě.
Parametr transactionType není jedním z 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 čí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 zadaným id parametrem je ve frontě pomocí kontextu transakce definovaného parametrem transactionType . V opačném případě metoda počká na doručení nové zprávy v daném časovém období. Pokud nová zpráva nedorazí před vypršením časového limitu, vyvolá se výjimka.
Parametr timeout nezadá celkovou dobu běhu pro tuto metodu. Místo toho určuje dobu čekání na přijetí nové zprávy do fronty. Pokaždé, když přijde nová zpráva, tato metoda prozkoumá Id novou zprávu a zjistí, jestli odpovídá parametru id . Pokud ne, tato metoda spustí časové období vypršení časového limitu a čeká na doručení další nové zprávy. Proto pokud nové zprávy budou docházet v časovém limitu, je možné, aby tato metoda pokračovala po neomezenou dobu, a to buď do vypršení časového limitu, bez příchodu nových zpráv, nebo až do přijetí zprávy, jejíž Id odpovídá parametru id .
Zadejte Automatic parametr transactionType , 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řijmout zprávu z transakční fronty mimo kontext transakce.
Vlastnost Id zprávy je jedinečná v rámci organizace služby Řízení front zpráv, takže ve frontě bude maximálně jedna zpráva, která odpovídá danému id parametru. Pokud je zpráva se zadaným identifikátorem v jiné frontě než zpráva přidružená k této MessageQueue instanci, zpráva se nenajde.
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 doručovány do fronty během časového limitu určeného parametrem timeout . Vlákno bude blokováno alespoň na dané časové období nebo po neomezenou dobu, pokud jste zadali hodnotu InfiniteTimeout parametru timeout , nebo pokud nové zprávy budou do fronty pokračovat v časovém limitu určeném parametrem timeout .
Pokud je tato metoda volána pro příjem zprávy z transakční fronty, zpráva přijatá by byla vrácena do fronty, pokud je transakce přerušena. Zpráva není trvale odebrána z fronty, dokud transakce nebude 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í zprávy o potvrzení, sestavě nebo vygenerované aplikace, která byla vytvořena v důsledku 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 následná volání metody vrátí stejnou zprávu, pokud do fronty nepřijde zpráva s vyšší prioritou. Neexistuje žádný kontext transakce spojený se zprávou vrácenou voláním PeekById(String). Vzhledem k tomu PeekById(String) , že neodebere žádné zprávy ve frontě, nebude možné vrátit zpět, pokud by 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č | Ano |
| Název místního počítače a přímého formátu | Ano |
| Vzdálený počítač | Ne |
| Název vzdáleného počítače a přímého formátu | Ano |