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
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
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
- transaction
- MessageQueueTransaction
MessageQueueTransaction nesnesi.
Döndürülenler
özelliği Id geçirilen Message 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 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
- 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
- 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
- timeout
- TimeSpan
TimeSpan Yeni bir iletinin denetlenmeye hazır olmasını bekleme süresini gösteren bir.
- transaction
- MessageQueueTransaction
MessageQueueTransaction nesnesi.
Döndürülenler
özelliği Id geçirilen Message parametreyle id
eşleşir.
Özel durumlar
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
- 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 |