MessageQueue.ReceiveById Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Verilen tanımlayıcıyla eşleşen iletiyi alır ve kuyruktan kaldırır.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| ReceiveById(String) |
İşlem dışı bir kuyruktan verilen tanımlayıcıyla eşleşen iletiyi alır ve şu anda 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 şu anda kuyrukta belirtilen tanımlayıcıya sahip bir ileti yoksa hemen bir özel durum oluşturur. |
| ReceiveById(String, MessageQueueTransactionType) |
Verilen tanımlayıcıyla eşleşen iletiyi alır ve şu anda 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 duruma gelene 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 duruma gelene 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 şu anda 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
Döndürülenler
özelliği MessageId geçirilen parametreyle id eşleşir.
Özel durumlar
id parametresi null'dir.
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ıza olanak sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntem 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 | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
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 şu anda 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
- transaction
- MessageQueueTransaction
MessageQueueTransaction nesnesi.
Döndürülenler
özelliği MessageId geçirilen parametreyle id eşleşir.
Özel durumlar
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 bir 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 bir işlem kuyruğunda çağrıldığından, 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öntem 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ş bir işlem bağlamı yoktur. PeekById(String) Kuyruktaki hiçbir ileti kaldırılmadığı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 | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
Ayrıca bkz.
Şunlara uygulanır
ReceiveById(String, MessageQueueTransactionType)
Verilen tanımlayıcıyla eşleşen iletiyi alır ve şu anda 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
- 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 MessageId geçirilen parametreyle id eşleşir.
Özel durumlar
id parametresi null'dir.
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ı 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. İş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öntem 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ş bir işlem bağlamı yoktur. PeekById(String) Kuyruktaki hiçbir ileti kaldırılmadığı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 | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
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 duruma gelene 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
Döndürülenler
özelliği MessageId geçirilen parametreyle id eşleşir.
Özel durumlar
id parametresi null'dir.
parametresi için belirtilen değer geçerli değil, büyük olasılıkla değerinden timeoutZero küçük veya büyüktürInfiniteTimeout.timeout
Belirtilen id ile bir ileti zaman aşımı süresi dolmadan önce kuyruğa gelmedi.
-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. Bu yöntem, parametresi tarafından id belirtilen tanımlayıcıya sahip ileti 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 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 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 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ıza olanak sağlar. Receive yöntemi kuyruktaki ilk iletiyi döndürür ve ReceiveByCorrelationId(String) yöntem 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 | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
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 duruma gelene 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
- transaction
- MessageQueueTransaction
MessageQueueTransaction nesnesi.
Döndürülenler
özelliği MessageId geçirilen parametreyle id eşleşir.
Özel durumlar
parametresi için belirtilen değer geçerli değil, büyük olasılıkla değerinden timeoutZero küçük veya büyüktürInfiniteTimeout.timeout
Belirtilen id ile bir ileti zaman aşımı süresi dolmadan önce kuyruğa gelmedi.
-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 bir 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. Bu yöntem, parametresi tarafından id belirtilen tanımlayıcıya sahip ileti 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 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 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 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.
Bu yöntem bir işlem kuyruğunda çağrıldığından, 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öntem 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önteme 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 ileti kaldırılmadığı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 | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |
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
- 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 MessageId geçirilen parametreyle id eşleşir.
Özel durumlar
id parametresi null'dir.
parametresi için belirtilen değer geçerli değil, büyük olasılıkla değerinden timeoutZero küçük veya büyüktürInfiniteTimeout.timeout
Belirtilen id ile bir ileti zaman aşımı süresi dolmadan önce kuyruğa gelmedi.
-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 idtransactionType tanımlanan 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 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.
İletiyi transactionType almak için kullanmak istediğiniz iş parçacığına eklenmiş bir dış işlem bağlamı 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 parametresi tarafından timeout belirtilen zaman aşımı süresi içinde kuyruğa yeni iletiler gelmeye devam ederse süresiz olarak engellenir.
İş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. İş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öntem 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ş bir işlem bağlamı yoktur. PeekById(String) Kuyruktaki hiçbir ileti kaldırılmadığı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 | Mevcut |
|---|---|
| Yerel bilgisayar | Evet |
| Yerel bilgisayar ve doğrudan biçim adı | Evet |
| Uzak bilgisayar | Hayır |
| Uzak bilgisayar ve doğrudan biçim adı | Evet |