Service Bus özel durumları

Bu makalede, api'ler tarafından oluşturulan .NET .NET Framework listeler.

Özel durum kategorileri

Mesajlaşma API'leri, aşağıdaki kategorilere inecek özel durumların yanı sıra bunları düzeltmeye yönelik olarak gerçekleştirebilirler. Özel durumun anlamı ve nedenleri mesajlaşma varlığının türüne bağlı olarak değişebilir:

  1. Kullanıcı kodlama hatası (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Genel eylem: Devam etmeden önce kodu düzeltmeyi deneyin.
  2. Kurulum/yapılandırma hatası (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Genel eylem: Yapılandırmanızı gözden geçirme ve gerekirse değiştirme.
  3. Geçici özel durumlar (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Genel eylem: işlemi yeniden deneyin veya kullanıcılara bildirme. İstemci RetryPolicy SDK'sı sınıfı yeniden denemeleri otomatik olarak işlemek üzere yalıtabilirsiniz. Daha fazla bilgi için bkz. Yeniden deneme kılavuzu.
  4. Diğer özel durumlar (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Genel eylem: özel durum türüne özgü; Aşağıdaki bölümdeki tabloya bakın:

Özel durum türleri

Aşağıdaki tabloda mesajlaşma özel durum türleri ve bunların nedenleri listelenin ve gerçekleştirebilirsiniz önerilen eylemi not alın.

Özel Durum Türü Açıklama/Neden/Örnekler Önerilen Eylem Otomatik/anında yeniden denemeye dikkat edin
Timeoutexception Sunucu, OperationTimeouttarafından denetlenen belirtilen süre içinde istenen işleme yanıt vermedi. Sunucu istenen işlemi tamamlamış olabilir. Ağ veya diğer altyapı gecikmeleri nedeniyle bu durum yaşanıyor olabilir. Sistem durumunu tutarlılık için kontrol edin ve gerekirse yeniden deneyin. Bkz. Zaman aşımı özel durumları. Yeniden deneme bazı durumlarda yardımcı olabilir; koda yeniden deneme mantığı ekleyin.
InvalidOperationException İstenen kullanıcı işlemi sunucu veya hizmet içinde izin verilmez. Ayrıntılar için özel durum iletisine bakın. Örneğin, İleti ReceiveAndDelete modunda alındı ise Complete() bu özel durumu oluşturur. Kodu ve belgeleri kontrol edin. İstenen işlemi geçerli olduğundan emin olun. Yeniden deneme yardımcı olmaz.
Operationcanceledexception Kapatılan, durdurulan veya atılan bir nesne üzerinde bir işlemi çağırma girişimi yapılır. Nadir durumlarda, ortam işlemi zaten atıldı. Kodu kontrol edin ve at nesnesi üzerinde işlemleri çağırmay olduğundan emin olun. Yeniden deneme yardımcı olmaz.
Unauthorizedaccessexception TokenProvider nesnesi belirteç aamadı, belirteç geçersiz veya belirteç işlemi yapmak için gereken talepleri içermedi. Belirteç sağlayıcısının doğru değerlerle oluşturulduktan emin olun. Uygulamanın yapılandırmasını Access Control Service. Yeniden deneme bazı durumlarda yardımcı olabilir; koda yeniden deneme mantığı ekleyin.
Argumentexception
Argumentnullexception
Argumentoutofrangeexception
Yöntemine sağlanan bir veya daha fazla bağımsız değişken geçersiz.
NamespaceManager veya Create için sağlanan URI yol kesimlerini içerir.
NamespaceManager veya Create için sağlanan URI şeması geçersiz.
Özellik değeri 32 KB'den büyüktür.
Çağıran kodu denetleyin ve bağımsız değişkenlerin doğru olduğundan emin olun. Yeniden deneme yardımcı olmaz.
MessagingEntityNotFoundException İşlemle ilişkili varlık yok veya silinmiş. Varlığın mevcut olduğundan emin olun. Yeniden deneme yardımcı olmaz.
MessageNotFoundException Belirli bir dizi numarasına sahip bir ileti almaya çalışabilirsiniz. Bu ileti bulunamadı. İletinin daha önce alınmamıştır. İletinin deadlettered olup olduğunu görmek için deadletter kuyruğuna bakın. Yeniden deneme yardımcı olmaz.
MessagingCommunicationException İstemci, Service Bus ile bağlantı kura Service Bus. Sağlanan ana bilgisayar adının doğru olduğundan ve ana bilgisayar için erişilebilir olduğundan emin olun.

Kodunuz güvenlik duvarı/ara sunucusu olan bir ortamda çalışıyorsa, etki alanı/IP Service Bus bağlantı noktalarına gelen trafiğin engellenmiş olduğundan emin olun.

Aralıklı bağlantı sorunları varsa yeniden deneme yardımcı olabilir.
ServerBusyException Hizmet şu anda isteği işleyemektedir. İstemci bir süre bekleyebilir ve ardından işlemi yeniden sınlar. İstemci belirli bir süre sonra yeniden denemesi olabilir. Yeniden deneme farklı bir özel durumla sonuçlandısa, bu özel durumun yeniden deneme davranışını kontrol edin.
MessagingException Aşağıdaki durumlarda atılan genel mesajlaşma özel durumu:

Farklı bir varlık türüne (örneğin, bir konu) ait olan bir ad veya yol kullanılarak QueueClient oluşturma girişimi yapılır.

256 KB'den büyük bir ileti göndermek için bir deneme yapılır.

Sunucu veya hizmet, istek işleme sırasında bir hatayla karşılaştı. Ayrıntılar için özel durum iletisine bakın. Bu genellikle geçici bir özel durumdur.

Varlık kısıtlandı olduğundan istek sonlandırıldı. Hata kodu: 50001, 50002, 50008.

Kodu kontrol edin ve ileti gövdesi için yalnızca seri hale getirilebilir nesnelerin (veya özel bir seri hale getirici kullanın) olduğundan emin olur.

Özelliklerin desteklenen değer türleri için belgelere bakın ve yalnızca desteklenen türleri kullanın.

IsTransient özelliğini kontrol edin. Bu doğruysa, işlemi yeniden denemeyi deneyin.

Özel durum azaltma nedeniylese, birkaç saniye bekleyin ve işlemi yeniden deneyin. Yeniden deneme davranışı tanımlanmamıştır ve diğer senaryolarda yardımcı olmaz.
MessagingEntityAlreadyExistsException Bu hizmet ad alanı içinde başka bir varlık tarafından zaten kullanılan bir adla varlık oluşturma girişimi. Mevcut varlığı silin veya oluşturulacak varlık için farklı bir ad seçin. Yeniden deneme yardımcı olmaz.
Quotaexceededexception Mesajlaşma varlığı izin verilen en büyük boyuta ulaştı veya bir ad alanına yönelik en fazla bağlantı sayısı aşıldı. Varlıktan veya altqueularından iletiler alınarak varlıkta alan oluşturun. Bkz. QuotaExceededException. Bu sırada iletiler kaldırılmışsa yeniden deneme yardımcı olabilir.
RuleActionException Service Bus geçersiz kural eylemi oluşturma girişiminde bulunduysanız bu özel durumu döndürür. Service Bus özel durum, bu ileti için kural eylemi işleme sırasında bir hata oluşursa, bu özel durumu bir deadlettered iletiye iliştirer. Kural eylemde doğru olup olmadığını denetleyin. Yeniden deneme yardımcı olmaz.
FilterException Service Bus, geçersiz bir filtre oluşturma girişiminde bulunduysanız bu özel durumu döndürür. Service Bus, bu ileti için filtre işleme sırasında bir hata oluştu ise bu özel durumu bir deadlettered iletiye iliştirer. Filtrenin doğru olup olmadığını denetleyin. Yeniden deneme yardımcı olmaz.
SessionCannotBeLockedException Belirli bir oturum kimliğine sahip bir oturumu kabul etmeye çalışabilirsiniz, ancak oturum şu anda başka bir istemci tarafından kilitlenir. Oturumun kilidinin diğer istemciler tarafından açık olduğundan emin olun. Oturum ara sırasında serbest bırakıldı ise yeniden deneme yardımcı olabilir.
TransactionSizeExceededException Çok fazla işlem, işlem kapsamındadır. Bu işlem kapsamındaki işlem sayısını azaltma. Yeniden deneme yardımcı olmaz.
MessagingEntityDisabledException Devre dışı bırakılmış bir varlığa çalışma zamanı işlemi isteği. Varlığı etkinleştirin. Varlık ara içinde etkinleştirildikten sonra yeniden deneme yardımcı olabilir.
NoMatchingSubscriptionException Service Bus, önceden filtrelemenin etkin olduğu ve filtrelerden hiçbirinin eşleşmemiş olduğu bir konuya ileti gönderirken bu özel durumu döndürür. En az bir filtrenin eş olduğundan emin olun. Yeniden deneme yardımcı olmaz.
MessageSizeExceededException İleti yükü 256 KB sınırını aşıyor. 256 KB sınırı, sistem özelliklerini ve herhangi bir .NET ek yükünü içeren toplam ileti boyutudur. İleti yükünün boyutunu azaltarak işlemi yeniden deneyin. Yeniden deneme yardımcı olmaz.
Transactionexception Ortam işlemi ( Transaction.Current ) geçersiz. Tamamlanmış veya durdurulmış olabilir. İç özel durum ek bilgi sağlar. Yeniden deneme yardımcı olmaz.
Transactionındoubtexception Şüpheli bir işlemde bir işlem denenir veya işlemi işlemeye yönelik bir girişimde bulunarak işlem şüpheli hale gelir. İşlem zaten işlendi olabilir, çünkü uygulamanız bu özel durumu işlemeli (özel bir durum olarak). -

Quotaexceededexception

QuotaExceededException, belirli bir varlık için belirlenen kotanın aşıldığını gösterir.

Kuyruklar ve konular

Kuyruklar ve konular için genellikle kuyruğun boyutudur. Hata iletisi özelliği, aşağıdaki örnekte olduğu gibi daha fazla ayrıntı içerir:

Microsoft.ServiceBus.Messaging.QuotaExceededException
Message: The maximum entity size has been reached or exceeded for Topic: 'xxx-xxx-xxx'. 
    Size of entity in bytes:1073742326, Max entity size in bytes:
1073741824..TrackingId:xxxxxxxxxxxxxxxxxxxxxxxxxx, TimeStamp:3/15/2013 7:50:18 AM

İleti, konunun boyut sınırını aşmış olduğunu (bu durumda 1 GB) (varsayılan boyut sınırı) ifade ediyor.

Ad alanları

Ad alanları için QuotaExceededException, bir uygulamanın bir ad alanına en fazla bağlantı sayısını aşmış olduğunu gösteriyor olabilir. Örnek:

Microsoft.ServiceBus.Messaging.QuotaExceededException: ConnectionsQuotaExceeded for namespace xxx.
<tracking-id-guid>_G12 ---> 
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: 
ConnectionsQuotaExceeded for namespace xxx.

Yaygın nedenler

Bu hatanın iki yaygın nedeni vardır: ileti gönderme kuyruğu ve işlevsiz ileti alıcıları.

  1. Bekleyen ileti kuyruğu Okuyucu iletileri tamamlayamaz ve kilit süresi dolduğunda iletiler kuyruğa/konuya döndürülür. Okuyucu, BrokeredMessage.Completeçağrısından engelleyen bir özel durumla karşılaşırsa bu durum olabilir. Bir ileti 10 kez okunduktan sonra varsayılan olarak ileti okunan ileti kuyruğuna taşınır. Bu davranış QueueDescription.MaxDeliveryCount özelliği tarafından denetlenmektedir ve varsayılan değeri 10'dur. İletiler, ileti alma kuyruğunda birikti olarak yer alır.

    Sorunu çözmek için, herhangi bir kuyrukta olduğu gibi, ileti gönderme kuyruğundan gelen iletileri okuyun ve tamamlarsınız. FormatDeadLetterPath yöntemini kullanarak ileti olmayan ileti kuyruğu yolunu biçimlendirebilirsiniz.

  2. Alıcı durduruldu. Alıcı kuyruktan veya abonelikten ileti almayı durdurdu. Bunu belirlemenin yolu, iletilerin tam dökümünü gösteren QueueDescription.MessageCountDetails özelliğine bakmaktır. ActiveMessageCount özelliği yüksekse veya büyüyorsa iletiler yazılan kadar hızlı okunmamaktadır.

Timeoutexception

TimeoutException, kullanıcı tarafından başlatılan bir işlem zaman aşımından daha uzun sürer.

ServicePointManager.DefaultConnectionLimit özelliğinin değerini denetlemelisiniz çünkü bu sınıra ulaşarak TimeoutExceptionda olabilir.

Hizmeti çalıştıran kaynaklarda hizmet güncelleştirmeleri (veya) Service Bus güncelleştirmeleri gibi bakım işlemleri sırasında veya bunlar arasında zaman aşımı olması beklenir. Işletim sistemi güncelleştirmeleri sırasında varlıklar taşınır ve düğümler güncelleştirilir veya yeniden başlatılır; bu da zaman aşımına neden olabilir. Azure Service Bus hizmetine ilişkin hizmet düzeyi sözleşmesi (SLA)ayrıntıları için bkz. Service Bus. .

Kuyruklar ve konular

Kuyruklar ve konular için zaman aşımı MessagingFactorySettings.OperationTimeout özelliğinde, bağlantı dizesinin bir parçası olarak veya ServiceBusConnectionStringBuilder aracılığıyla belirtilir. Hata iletisinin kendisi farklılık gösterebilir, ancak her zaman geçerli işlem için belirtilen zaman aşımı değerini içerir.

MessageLockLostException

Nedeni

PeekLock Alma modu kullanılarak bir ileti alınıp istemci tarafından tutulan kilidin hizmet tarafında süresi dolduğunda MessageLockLostException özel süresi dolar.

Bir iletinin kilidinin süresi çeşitli nedenlerden dolayı sona erer:

  • Kilit süreölçeri, istemci uygulaması tarafından yenilenmeden önce sona erer.
  • İstemci uygulaması kilidi edindi, kalıcı bir depoya kaydedti ve sonra yeniden başlattı. Yeniden başlatıldıktan sonra istemci uygulaması, inflight iletilerini inceledi ve bunları tamamlamayı denedi.

Çözüm

MessageLockLostException durumunda istemci uygulaması artık iletiyi işleyemeyecektir. İstemci uygulaması isteğe bağlı olarak analiz için özel durumu günlüğe kaydetmeyi göz önünde bulundurabilirsiniz, ancak istemcinin iletiyi atmış olması gerekir.

İletide kilidin süresi dolduğundan, Kuyruğa (veya Aboneliğe) geri döner ve çağrıyı alan sonraki istemci uygulaması tarafından işlenebilir.

MaxDeliveryCount değeri aşılırsa ileti DeadLetterQueue'ya taşınabilirsiniz.

SessionLockLostException

Nedeni

SessionLockLostException, bir oturum kabul edildiğinde ve istemci tarafından tutulan kilidin hizmet tarafında süresi dolduğunda gerçekleştirildi.

Bir oturumda kilidin süresi çeşitli nedenlerden dolayı dolabiliyor:

  • Kilit süreölçeri, istemci uygulaması tarafından yenilenmeden önce sona erer.
  • İstemci uygulaması kilidi edindi, kalıcı bir depoya kaydedti ve sonra yeniden başlattı. Yeniden başlatıldıktan sonra istemci uygulaması, inflight oturumlarını inceledi ve bu oturumlarda iletileri işlemeyi denedi.

Çözüm

SessionLockLostException durumunda, istemci uygulaması artık oturumda iletileri işleyemeyecektir. İstemci uygulaması analiz için özel durumu günlüğe kaydetmeyi göz önünde bulundurabilirsiniz, ancak istemcinin iletiyi atmış olması gerekir.

Oturumda kilidin süresi dolduğundan, Kuyruğa (veya Aboneliğe) geri döner ve oturumu kabul eden sonraki istemci uygulaması tarafından kilitlenebilir. Oturum kilidi herhangi bir zamanda tek bir istemci uygulaması tarafından tutularak sırayla işleme garanti altına alınan bir işlemdir.

SocketException

Nedeni

Aşağıdaki durumlarda bir SocketException atılan:

  • Ana bilgisayar belirli bir süre sonra düzgün yanıt vermemiş olduğundan bir bağlantı girişimi başarısız olduğunda (TCP hata kodu 10060).
  • Bağlı konak yanıt verme başarısız olduğundan bir bağlantı kurulamadı.
  • İletiyi işleme sırasında bir hata oluştu veya zaman aşımı uzak konak tarafından aşıldı.
  • Temel ağ kaynağı sorunu.

Çözüm

SocketException hataları, uygulamaları barındıran VM'nin adı karşılık gelen IP adresine <mynamespace>.servicebus.windows.net dönüştürenem olduğunu gösterir.

Aşağıdaki komutun bir IP adresiyle eşlemede başarılı olup olamay olduğunu kontrol edin.

PS C:\> nslookup <mynamespace>.servicebus.windows.net

aşağıda olduğu gibi bir çıkış sağlanarak

Name:    <cloudappinstance>.cloudapp.net
Address:  XX.XX.XXX.240
Aliases:  <mynamespace>.servicebus.windows.net

Yukarıdaki ad bir IP'ye ve ad alanı diğer adına çözümlemezse, hangi ağ yöneticisinin daha fazla araştırılacak olduğunu kontrol edin. Ad çözümlemesi genellikle müşteri ağının bir kaynağı olan DNS sunucusu üzerinden yapılır. DNS çözümlemesi Azure DNS lütfen Azure desteği.

Ad çözümlemesi beklendiği gibi çalışıyorsa, Burada Azure Service Bus bağlantılara izin verilip izin verilmey olduğunu kontrol edin

MessagingException

Nedeni

MessagingException, çeşitli nedenlerle atılan genel bir özel durumdur. Nedenlerinden bazıları aşağıda listelenmiştir.

  • Bir Konuda veya Abonelikte QueueClient oluşturmak için bir deneme yapılır.
  • Gönderilen iletinin boyutu, verilen katman sınırının üzerindedir. Kotalar ve limitler hakkında Service Bus daha fazla bilgi okuyun.
  • Azaltma nedeniyle belirli veri düzlemi isteği (gönderme, alma, tamamlama, bırakma) sonlandırıldı.
  • Hizmet yükseltmeleri ve yeniden başlatmalar nedeniyle oluşan geçici sorunlar.

Not

Yukarıdaki özel durumlar listesi kapsamlı değildir.

Çözüm

Çözüm adımları, MessagingException'ın neden olduğu duruma bağlıdır.

  • Geçici sorunlar için (burada isTransient _ _ değeri _true _ olarak ayarlanır) veya _ azaltma sorunları için, işlemi yeniden denemek sorunu çözebilir. Bunun için SDK'da varsayılan yeniden deneme ilkesi kullanılabilir.
  • Diğer sorunlar için, özel durum ayrıntıları sorunu ve çözüm adımlarını aynı şekilde işaret ediyor olabilir.

StorageQuotaExceededException

Nedeni

StorageQuotaExceededException, premium ad alanı içinde varlıkların toplam boyutu mesajlaşma birimi başına 1 TB sınırını aştıklarında oluşturulur.

Çözüm

  • Premium ad alanına atanan mesajlaşma birimi sayısını artırma
  • Bir ad alanı için izin verilen en fazla mesajlaşma birimini zaten kullanıyorsanız, ayrı bir ad alanı oluşturun.

Sonraki adımlar

.NET API Service Bus için bkz. Azure .NET API başvurusu. Sorun giderme ipuçları için sorun giderme kılavuzuna bakın