Sdílet prostřednictvím


MessageQueue.ReceiveById Metoda

Definice

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

id
String

Zpráva Id , která se má přijmout.

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

id
String

Zpráva Id , která se má přijmout.

Návraty

Id Jehož Message vlastnost odpovídá parametru id předaného.

Výjimky

Parametr id je null.

nebo

Parametr transaction je null.

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

id
String

Zpráva Id , 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á 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

id
String

Zpráva Id , která se má přijmout.

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

id
String

Zpráva Id , která se má přijmout.

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.

nebo

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

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

id
String

Zpráva Id , která se má přijmout.

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

Viz také

Platí pro