Aracılığıyla paylaş


MessageQueue.ReceiveById Yöntem

Tanım

Verilen tanımlayıcıyla eşleşen iletiyi alır ve kuyruktan kaldırır.

Aşırı Yüklemeler

ReceiveById(String)

İşlem dışı bir kuyruktan verilen tanımlayıcıyla eşleşen iletiyi alır ve kuyrukta belirtilen tanımlayıcıya sahip bir ileti yoksa hemen bir özel durum oluşturur.

ReceiveById(String, MessageQueueTransaction)

Verilen tanımlayıcıyla eşleşen iletiyi alır (işlem kuyruğundan) ve kuyrukta belirtilen tanımlayıcıya sahip bir ileti yoksa hemen bir özel durum oluşturur.

ReceiveById(String, MessageQueueTransactionType)

Belirtilen tanımlayıcıyla eşleşen iletiyi alır ve kuyrukta belirtilen tanımlayıcıya sahip bir ileti yoksa hemen bir özel durum oluşturur.

ReceiveById(String, TimeSpan)

Verilen tanımlayıcıyla eşleşen iletiyi alır (işlem dışı bir kuyruktan) ve belirtilen tanımlayıcıya sahip bir ileti kuyrukta kullanılabilir olana veya zaman aşımı süresi dolana kadar bekler.

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Verilen tanımlayıcıyla eşleşen iletiyi alır (işlem kuyruğundan) ve belirtilen tanımlayıcıya sahip bir ileti kuyrukta kullanılabilir olana veya zaman aşımı süresi dolana kadar bekler.

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Verilen tanımlayıcıyla eşleşen iletiyi alır ve belirtilen tanımlayıcıya sahip bir ileti kuyrukta kullanılabilir duruma gelene veya zaman aşımı süresi dolana kadar bekler.

ReceiveById(String)

İşlem dışı bir kuyruktan verilen tanımlayıcıyla eşleşen iletiyi alır ve kuyrukta belirtilen tanımlayıcıya sahip bir ileti yoksa hemen bir özel durum oluşturur.

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

Parametreler

id
String

Id Alınacak iletinin sayısı.

Döndürülenler

özelliği Id geçirilen Message parametreyle id eşleşir.

Özel durumlar

id parametresidirnull.

Belirtilen id ileti bulunamadı.

Message Queuing yöntemine erişilirken bir hata oluştu.

Örnekler

Aşağıdaki kod örneğinde kullanımı gösterilmektedir 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);

Açıklamalar

Bilinen tanımlayıcıya sahip bir iletiyi okumak ve kuyruktan kaldırmak için bu yöntemi kullanın. İleti kuyrukta değilse bu yöntem hemen bir özel durum oluşturur.

İletinin Id özelliği Message Queuing kuruluşunda benzersizdir, bu nedenle kuyrukta verilen id parametreyle eşleşen en fazla bir ileti olacaktır.

İki yöntem daha kuyruktan ileti almanızı sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntemi kuyruğa gönderilen bir iletinin sonucu olarak oluşturulan bir bildirim, rapor veya uygulama tarafından oluşturulan yanıt iletisini almak için kullanılır.

Belirtilen tanımlayıcıya sahip bir iletiyi kuyruktan kaldırmadan okumak için yöntemini kullanın PeekById(String) . PeekById(String) yöntemi her zaman kuyruktaki ilk iletiyi döndürür, bu nedenle yönteme yapılan sonraki çağrılar kuyruğa daha yüksek öncelikli bir ileti ulaşmadığı sürece aynı iletiyi döndürür.

Aşağıdaki tabloda bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.

Çalışma grubu modu Kullanılabilir
Yerel bilgisayar Yes
Yerel bilgisayar ve doğrudan biçim adı Yes
Uzak bilgisayar No
Uzak bilgisayar ve doğrudan biçim adı Yes

Ayrıca bkz.

Şunlara uygulanır

ReceiveById(String, MessageQueueTransaction)

Verilen tanımlayıcıyla eşleşen iletiyi alır (işlem kuyruğundan) ve kuyrukta belirtilen tanımlayıcıya sahip bir ileti yoksa hemen bir özel durum oluşturur.

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

Parametreler

id
String

Id Alınacak iletinin sayısı.

Döndürülenler

özelliği Id geçirilen Message parametreyle id eşleşir.

Özel durumlar

id parametresidirnull.

-veya-

transaction parametresidirnull.

Belirtilen id ileti bulunamadı.

Kuyruk işlemsel değil.

-veya-

Message Queuing yöntemine erişilirken bir hata oluştu.

Örnekler

Aşağıdaki kod örneğinde kullanımı gösterilmektedir 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();
}

Açıklamalar

Bilinen tanımlayıcıya sahip bir iletiyi okumak ve parametresi tarafından transaction tanımlanan iç işlem bağlamını kullanarak kuyruktan kaldırmak için bu yöntemi kullanın. İleti kuyrukta değilse bu yöntem hemen bir özel durum oluşturur

İletinin Id özelliği Message Queuing kuruluşunda benzersizdir, bu nedenle kuyrukta verilen id parametreyle eşleşen en fazla bir ileti olacaktır.

Bu yöntem işlem kuyruğunda çağrıldığından, işlem durdurulduysa alınan ileti kuyruğa döndürülür. İleti, işlem yürütülene kadar kuyruktan kalıcı olarak kaldırılmaz.

İki yöntem daha kuyruktan ileti almanızı sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntemi kuyruğa gönderilen bir iletinin sonucu olarak oluşturulan bir bildirim, rapor veya uygulama tarafından oluşturulan yanıt iletisini almak için kullanılır.

Belirtilen tanımlayıcıya sahip bir iletiyi kuyruktan kaldırmadan okumak için yöntemini kullanın PeekById(String) . PeekById(String) yöntemi her zaman kuyruktaki ilk iletiyi döndürür, bu nedenle yönteme yapılan sonraki çağrılar kuyruğa daha yüksek öncelikli bir ileti ulaşmadığı sürece aynı iletiyi döndürür. çağrısı PeekById(String)tarafından döndürülen bir iletiyle ilişkilendirilmiş işlem bağlamı yoktur. PeekById(String) Kuyruktaki hiçbir ileti kaldırılmadığından, işlem durdurulduysa geri alınabilecek hiçbir şey olmaz.

Aşağıdaki tabloda bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.

Çalışma grubu modu Kullanılabilir
Yerel bilgisayar Yes
Yerel bilgisayar ve doğrudan biçim adı Yes
Uzak bilgisayar No
Uzak bilgisayar ve doğrudan biçim adı Yes

Ayrıca bkz.

Şunlara uygulanır

ReceiveById(String, MessageQueueTransactionType)

Belirtilen tanımlayıcıyla eşleşen iletiyi alır ve kuyrukta belirtilen tanımlayıcıya sahip bir ileti yoksa hemen bir özel durum oluşturur.

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

Parametreler

id
String

Id Alınacak iletinin sayısı.

transactionType
MessageQueueTransactionType

MessageQueueTransactionType İletiyle ilişkilendirilecek işlem bağlamının türünü açıklayan değerlerden biri.

Döndürülenler

özelliği Id geçirilen Message parametreyle id eşleşir.

Özel durumlar

id parametresidirnull.

Belirtilen id ileti bulunamadı.

transactionType parametresi üyelerden MessageQueueTransactionType biri değildir.

Message Queuing yöntemine erişilirken bir hata oluştu.

Örnekler

Aşağıdaki kod örneğinde kullanımı gösterilmektedir 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);

Açıklamalar

Bilinen tanımlayıcıya sahip bir iletiyi okumak ve kuyruktan kaldırmak için bu yöntemi kullanın. İleti kuyrukta değilse bu yöntem hemen bir özel durum oluşturur. Aksi takdirde, ileti kuyruktan kaldırılır ve parametresi tarafından transactionType tanımlanan bir işlem bağlamı kullanılarak uygulamaya döndürülür.

İletiyi transactionType almak için kullanmak istediğiniz iş parçacığına eklenmiş bir dış işlem bağlamı zaten varsa parametresini belirtinAutomatic. İletiyi tek bir iç işlem olarak almak isteyip istemediğinizi belirtin Single . İşlem bağlamı dışında bir işlem kuyruğundan ileti almak isteyip istemediğinizi belirtebilirsiniz None .

İletinin Id özelliği Message Queuing kuruluşunda benzersizdir, bu nedenle kuyrukta verilen id parametreyle eşleşen en fazla bir ileti olacaktır. Belirtilen tanımlayıcıya sahip ileti bu MessageQueue örnekle ilişkilendirilmiş olandan farklı bir kuyruktaysa, ileti bulunamaz.

İşlem kuyruğundan ileti almak için bu yöntem çağrılırsa, işlem durdurulduysa alınan ileti kuyruğa döndürülür. İleti, işlem yürütülene kadar kuyruktan kalıcı olarak kaldırılmaz.

İki yöntem daha kuyruktan ileti almanızı sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntemi kuyruğa gönderilen bir iletinin sonucu olarak oluşturulan bir bildirim, rapor veya uygulama tarafından oluşturulan yanıt iletisini almak için kullanılır.

Belirtilen tanımlayıcıya sahip bir iletiyi kuyruktan kaldırmadan okumak için yöntemini kullanın PeekById(String) . PeekById(String) yöntemi her zaman kuyruktaki ilk iletiyi döndürür, bu nedenle yönteme yapılan sonraki çağrılar kuyruğa daha yüksek öncelikli bir ileti ulaşmadığı sürece aynı iletiyi döndürür. çağrısı PeekById(String)tarafından döndürülen bir iletiyle ilişkilendirilmiş işlem bağlamı yoktur. PeekById(String) Kuyruktaki hiçbir ileti kaldırılmadığından, işlem durdurulduysa geri alınabilecek hiçbir şey olmaz.

Aşağıdaki tabloda bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.

Çalışma grubu modu Kullanılabilir
Yerel bilgisayar Yes
Yerel bilgisayar ve doğrudan biçim adı Yes
Uzak bilgisayar No
Uzak bilgisayar ve doğrudan biçim adı Yes

Ayrıca bkz.

Şunlara uygulanır

ReceiveById(String, TimeSpan)

Verilen tanımlayıcıyla eşleşen iletiyi alır (işlem dışı bir kuyruktan) ve belirtilen tanımlayıcıya sahip bir ileti kuyrukta kullanılabilir olana veya zaman aşımı süresi dolana kadar bekler.

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

Parametreler

id
String

Id Alınacak iletinin sayısı.

timeout
TimeSpan

TimeSpan Yeni bir iletinin denetlenmeye hazır olmasını bekleme süresini gösteren bir.

Döndürülenler

özelliği Id geçirilen Message parametreyle id eşleşir.

Özel durumlar

id parametresidirnull.

parametresi için timeout belirtilen değer geçerli değil, büyük olasılıkla timeout değerinden Zero küçük veya büyüktür InfiniteTimeout.

Belirtilen id ile bir ileti zaman aşımı süresi dolmadan önce kuyruğa ulaşmadı.

-veya-

Message Queuing yöntemine erişilirken bir hata oluştu.

Örnekler

Aşağıdaki kod örneğinde kullanımı gösterilmektedir 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));

Açıklamalar

Bilinen tanımlayıcıya sahip bir iletiyi okumak ve kuyruktan kaldırmak için bu yöntemi kullanın. Parametresi tarafından id belirtilen tanımlayıcıya sahip ileti kuyruktaysa, bu yöntem hemen döndürür. Aksi takdirde, yöntem yeni bir iletinin gelmesi için verilen süreyi bekler. Zaman aşımı süresi dolmadan önce yeni bir ileti gelmezse, bir özel durum oluşur.

timeout parametresi bu yöntem için toplam çalışma süresini belirtmez. Bunun yerine, yeni bir iletinin kuyruğa gelmesini bekleme süresini belirtir. Her yeni ileti geldiğinde, bu yöntem parametresiyle eşleşip eşleşmediğini görmek için yeni iletinin öğesini id incelerId. Aksi takdirde, bu yöntem zaman aşımı süresini başlatır ve başka bir yeni iletinin gelmesini bekler. Bu nedenle, yeni iletiler zaman aşımı süresi içinde gelmeye devam ederse, zaman aşımı süresi dolana kadar veya parametresiyle eşleşen bir ileti gelene Id kadar bu yöntemin id süresiz olarak çalışmaya devam etmesi mümkündür.

İletinin Id özelliği Message Queuing kuruluşunda benzersizdir, bu nedenle kuyrukta verilen id parametreyle eşleşen en fazla bir ileti olacaktır.

Parametresi tarafından belirtilen zaman aşımı süresi içinde kuyruğa yeni iletiler gelmeye devam ettiği sürece geçerli iş parçacığının engellenmesi kabul edilebilir olduğunda bu aşırı yüklemesini ReceiveById(String)timeout kullanın. İş parçacığı en az belirli bir süre boyunca engellenir veya parametrenin timeout değerini InfiniteTimeout belirttiyseniz veya parametresi tarafından timeout belirtilen zaman aşımı süresi içinde kuyruğa yeni iletiler gelmeye devam ederse süresiz olarak engellenir.

İki yöntem daha kuyruktan ileti almanızı sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntemi kuyruğa gönderilen bir iletinin sonucu olarak oluşturulan bir bildirim, rapor veya uygulama tarafından oluşturulan yanıt iletisini almak için kullanılır.

Belirtilen tanımlayıcıya sahip bir iletiyi kuyruktan kaldırmadan okumak için yöntemini kullanın PeekById(String) . PeekById(String) yöntemi her zaman kuyruktaki ilk iletiyi döndürür, bu nedenle yönteme yapılan sonraki çağrılar kuyruğa daha yüksek öncelikli bir ileti ulaşmadığı sürece aynı iletiyi döndürür.

Aşağıdaki tabloda bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.

Çalışma grubu modu Kullanılabilir
Yerel bilgisayar Yes
Yerel bilgisayar ve doğrudan biçim adı Yes
Uzak bilgisayar No
Uzak bilgisayar ve doğrudan biçim adı Yes

Ayrıca bkz.

Şunlara uygulanır

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Verilen tanımlayıcıyla eşleşen iletiyi alır (işlem kuyruğundan) ve belirtilen tanımlayıcıya sahip bir ileti kuyrukta kullanılabilir olana veya zaman aşımı süresi dolana kadar bekler.

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

Parametreler

id
String

Id Alınacak iletinin sayısı.

timeout
TimeSpan

TimeSpan Yeni bir iletinin denetlenmeye hazır olmasını bekleme süresini gösteren bir.

Döndürülenler

özelliği Id geçirilen Message parametreyle id eşleşir.

Özel durumlar

id parametresidirnull.

-veya-

transaction parametresidirnull.

parametresi için timeout belirtilen değer geçerli değil, büyük olasılıkla timeout değerinden Zero küçük veya büyüktür InfiniteTimeout.

Belirtilen id ile bir ileti zaman aşımı süresi dolmadan önce kuyruğa ulaşmadı.

-veya-

Kuyruk işlemsel değil.

-veya-

Message Queuing yöntemine erişilirken bir hata oluştu.

Örnekler

Aşağıdaki kod örneğinde kullanımı gösterilmektedir 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();
}

Açıklamalar

Bilinen tanımlayıcıya sahip bir iletiyi okumak ve parametresi tarafından transaction tanımlanan iç işlem bağlamını kullanarak kuyruktan kaldırmak için bu yöntemi kullanın. Parametresi tarafından id belirtilen tanımlayıcıya sahip ileti kuyruktaysa, bu yöntem hemen döndürür. Aksi takdirde, yöntem yeni bir iletinin gelmesi için verilen süreyi bekler. Zaman aşımı süresi dolmadan önce yeni bir ileti gelmezse, bir özel durum oluşur.

timeout parametresi bu yöntem için toplam çalışma süresini belirtmez. Bunun yerine, yeni bir iletinin kuyruğa gelmesini bekleme süresini belirtir. Her yeni ileti geldiğinde, bu yöntem parametresiyle eşleşip eşleşmediğini görmek için yeni iletinin öğesini id incelerId. Aksi takdirde, bu yöntem zaman aşımı süresini başlatır ve başka bir yeni iletinin gelmesini bekler. Bu nedenle, yeni iletiler zaman aşımı süresi içinde gelmeye devam ederse, zaman aşımı süresi dolana kadar veya parametresiyle eşleşen bir ileti gelene Id kadar bu yöntemin id süresiz olarak çalışmaya devam etmesi mümkündür.

İletinin Id özelliği Message Queuing kuruluşunda benzersizdir, bu nedenle kuyrukta verilen id parametreyle eşleşen en fazla bir ileti olacaktır.

Parametresi tarafından belirtilen zaman aşımı süresi içinde kuyruğa yeni iletiler gelmeye devam ettiği sürece geçerli iş parçacığının engellenmesi kabul edilebilir olduğunda bu aşırı yüklemesini ReceiveById(String)timeout kullanın. İş parçacığı en az belirli bir süre boyunca veya parametre için timeout değeri InfiniteTimeout belirttiyseniz veya parametresi tarafından timeout belirtilen zaman aşımı süresi içinde kuyruğa yeni iletiler gelmeye devam ederse süresiz olarak engellenir.

Bu yöntem işlem kuyruğunda çağrıldığından, işlem durdurulduysa alınan ileti kuyruğa döndürülür. İleti, işlem yürütülene kadar kuyruktan kalıcı olarak kaldırılmaz.

İki yöntem daha kuyruktan ileti almanızı sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntemi kuyruğa gönderilen bir iletinin sonucu olarak oluşturulan bir bildirim, rapor veya uygulama tarafından oluşturulan yanıt iletisini almak için kullanılır.

Belirtilen tanımlayıcıya sahip bir iletiyi kuyruktan kaldırmadan okumak için yöntemini kullanın PeekById(String) . PeekById(String) yöntemi her zaman kuyruktaki ilk iletiyi döndürür, bu nedenle kuyruğa daha yüksek öncelikli bir ileti ulaşmadığı sürece yöntemine yapılan sonraki çağrılar aynı iletiyi döndürür. çağrısı PeekById(String)tarafından döndürülen bir iletiyle ilişkilendirilmiş işlem bağlamı yoktur. PeekById(String) Kuyruktaki hiçbir ileti kaldırılmadığından, işlem durdurulduysa geri alınabilecek hiçbir şey olmaz.

Aşağıdaki tabloda bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.

Çalışma grubu modu Kullanılabilir
Yerel bilgisayar Yes
Yerel bilgisayar ve doğrudan biçim adı Yes
Uzak bilgisayar No
Uzak bilgisayar ve doğrudan biçim adı Yes

Ayrıca bkz.

Şunlara uygulanır

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Verilen tanımlayıcıyla eşleşen iletiyi alır ve belirtilen tanımlayıcıya sahip bir ileti kuyrukta kullanılabilir duruma gelene veya zaman aşımı süresi dolana kadar bekler.

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

Parametreler

id
String

Id Alınacak iletinin.

timeout
TimeSpan

TimeSpan İnceleme için yeni bir ileti sağlanana kadar beklenebilecek süreyi gösteren bir.

transactionType
MessageQueueTransactionType

MessageQueueTransactionType İletiyle ilişkilendirilecek işlem bağlamının türünü açıklayan değerlerden biri.

Döndürülenler

Id özelliği Message geçirilen parametreyle id eşleşen.

Özel durumlar

id parametresidirnull.

parametresi için timeout belirtilen değer geçerli değil, büyük olasılıkla timeout değerinden Zero küçük veya büyüktür InfiniteTimeout.

Belirtilen id ile bir ileti zaman aşımı süresi dolmadan önce kuyruğa ulaşmadı.

-veya-

Message Queuing yöntemine erişilirken bir hata oluştu.

transactionType parametresi üyelerden MessageQueueTransactionType biri değildir.

Örnekler

Aşağıdaki kod örneğinde kullanımı gösterilmektedir 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);

Açıklamalar

Bilinen tanımlayıcıya sahip bir iletiyi okumak ve kuyruktan kaldırmak için bu yöntemi kullanın. Bu yöntem, parametresi tarafından belirtilen tanımlayıcıya sahip ileti, parametresi tarafından id tanımlanan transactionType bir işlem bağlamı kullanılarak kuyruktaysa hemen döndürür. Aksi takdirde, yöntem yeni bir iletinin gelmesi için belirli bir süre bekler. Zaman aşımı süresi dolmadan önce yeni bir ileti gelmezse, bir özel durum oluşturulur.

timeout parametresi bu yöntem için toplam çalışma süresini belirtmez. Bunun yerine, yeni bir iletinin kuyruğa gelmesini bekleme süresini belirtir. Her yeni ileti geldiğinde, bu yöntem yeni iletinin parametresiyle eşleşip eşleşmediğini id görmek için iletisini incelerId. Aksi takdirde, bu yöntem zaman aşımı süresini başlatır ve başka bir yeni iletinin gelmesini bekler. Bu nedenle, yeni iletiler zaman aşımı süresi içinde gelmeye devam ederse, zaman aşımı süresi dolana kadar veya parametresiyle eşleşen bir ileti gelene Id kadar bu yöntemin süresiz olarak çalışmaya devam etmesi id mümkündür.

İletiyi transactionType almak için kullanmak istediğiniz iş parçacığına eklenmiş bir dış işlem bağlamı zaten varsa parametresini belirtinAutomatic. İletiyi tek bir iç işlem olarak almak isteyip istemediğinizi belirtin Single . İşlem bağlamı dışında bir işlem kuyruğundan ileti almak isteyip istemediğinizi belirtebilirsiniz None .

İletinin Id özelliği Message Queuing kuruluşunda benzersizdir, bu nedenle kuyrukta verilen id parametreyle eşleşen en fazla bir ileti olacaktır. Belirtilen tanımlayıcıya sahip ileti bu MessageQueue örnekle ilişkilendirilmiş olandan farklı bir kuyruktaysa, ileti bulunamaz.

Parametresi tarafından belirtilen zaman aşımı süresi içinde yeni iletiler kuyruğa gelmeye devam ettiği sürece geçerli iş parçacığının engellenmesi kabul edilebilir olduğunda bu aşırı yüklemesini ReceiveById(String)timeout kullanın. İş parçacığı en az belirli bir süre boyunca engellenir veya parametrenin timeout değerini InfiniteTimeout belirttiyseniz veya parametre tarafından timeout belirtilen zaman aşımı süresi içinde yeni iletiler kuyruğa gelmeye devam ederse süresiz olarak engellenir.

İşlem kuyruğundan bir ileti almak için bu yöntem çağrılırsa, işlem durdurulduysa alınan ileti kuyruğa döndürülür. İşlem işlenene kadar ileti kuyruktan kalıcı olarak kaldırılmaz.

İki yöntem daha kuyruktan ileti almanıza olanak sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntemi kuyruğa gönderilen bir iletinin sonucu olarak oluşturulan bir bildirim, rapor veya uygulama tarafından oluşturulan yanıt iletisini almak için kullanılır.

Belirtilen tanımlayıcıya sahip bir iletiyi kuyruktan kaldırmadan okumak için yöntemini kullanın PeekById(String) . PeekById(String) yöntemi her zaman kuyruktaki ilk iletiyi döndürür, bu nedenle daha yüksek öncelikli bir ileti kuyruğa ulaşmadığı sürece yöntemine yapılan sonraki çağrılar aynı iletiyi döndürür. çağrısı PeekById(String)tarafından döndürülen bir iletiyle ilişkilendirilmiş bir işlem bağlamı yoktur. PeekById(String) Kuyruktaki hiçbir iletiyi kaldırmadığından, işlem durdurulduysa geri alınabilecek bir şey olmaz.

Aşağıdaki tabloda bu yöntemin çeşitli Çalışma Grubu modlarında kullanılabilir olup olmadığı gösterilmektedir.

Çalışma grubu modu Kullanılabilir
Yerel bilgisayar Yes
Yerel bilgisayar ve doğrudan biçim adı Yes
Uzak bilgisayar No
Uzak bilgisayar ve doğrudan biçim adı Yes

Ayrıca bkz.

Şunlara uygulanır