Sdílet prostřednictvím


MessageQueue.ReceiveById Metoda

Definice

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

id
String

Ze Id zprávy, která se má přijmout.

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

id
String

Ze Id zprávy, která se má přijmout.

Návraty

Id Jehož Message vlastnost odpovídá předaný id parametr.

Výjimky

Parametr id je null.

-nebo-

Parametr transaction je null.

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

id
String

Ze Id zprávy, která se má přijmout.

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

id
String

Ze Id zprávy, která se má přijmout.

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

id
String

Ze Id zprávy, která se má přijmout.

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.

-nebo-

Parametr transaction 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-

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

id
String

Ze Id zprávy, která se má přijmout.

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

Viz také

Platí pro