Service Bus mesajlaşma özel durumları (kullanım dışı)

Bu makalede.NET Framework API'leri tarafından oluşturulan .NET özel durumları listelenmektedir.

30 Eylül 2026'da Azure SDK yönergelerine uymayan WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus ve com.microsoft.azure.servicebus Azure Service Bus SDK kitaplıklarını kullanımdan kaldıracağız. Ayrıca SBMP protokolünün desteğini de sonlandıracağız, bu nedenle 30 Eylül 2026'da bu protokolü artık kullanamayacaksınız. Bu tarihten önce kritik güvenlik güncelleştirmeleri ve geliştirilmiş özellikler sunan en son Azure SDK kitaplıklarına geçiş yapın.

Eski kitaplıklar 30 Eylül 2026'dan sonra da kullanılabilir olsa da artık Microsoft'tan resmi destek ve güncelleştirmeler almayacaktır. Daha fazla bilgi için bkz . destek kullanımdan kaldırma duyurusu.

Özel durum kategorileri

Mesajlaşma API'leri, aşağıdaki kategorilere girebilecek özel durumlar ve bunları düzeltmek için gerçekleştirebileceğiniz ilişkili eylemleri oluşturur. Bir ö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çirin ve gerekirse değiştirin.
  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 bildirin. RetryPolicy İstemci SDK'sı sınıfı, yeniden denemeleri otomatik olarak işleyecek şekilde yapılandırılabilir. 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:

Önemli

  • Azure Service Bus, işlem bir işlem kapsamında olduğunda özel durum olması durumunda işlemi yeniden denemez.
  • Azure Service Bus'a özgü yeniden deneme kılavuzu için bkz . Service Bus için yeniden deneme kılavuzu.

Özel durum türleri

Aşağıdaki tabloda mesajlaşma özel durum türleri ve bunların nedenleri listelenmiştir ve gerçekleştirebileceğiniz önerilen eylem notları yer alır.

Özel Durum Türü Açıklama/Neden/Örnekler Önerilen Eylem Otomatik/anında yeniden denemeyle ilgili not
TimeoutException Sunucu, operationTimeout tarafı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 oluşabilir. Tutarlılık için sistem durumunu denetleyin 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şlemine sunucu veya hizmet içinde izin verilmez. Ayrıntılar için özel durum iletisine bakın. Örneğin, ileti ReceiveAndDelete modunda alındıysa Complete() bu özel durumu oluşturur. Kodu ve belgeleri denetleyin. İstenen işlemin geçerli olduğundan emin olun. Yeniden deneme yardımcı olmaz.
Operationcanceledexception Zaten kapatılmış, durdurulmuş veya atılmış bir nesne üzerinde bir işlem çağrılmaya çalışılır. Nadir durumlarda ortam işlemi zaten atılır. Kodu denetleyin ve atılan nesnede işlemleri çağırmadığından emin olun. Yeniden deneme yardımcı olmaz.
Unauthorizedaccessexception TokenProvider nesnesi belirteç alamadı, belirteç geçersiz veya belirteç işlemi yapmak için gereken talepleri içermiyor. Belirteç sağlayıcısının doğru değerlerle oluşturulduğundan emin olun. Erişim Denetimi Hizmeti'nin yapılandırmasını denetleyin. 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'a sağlanan URI düzeni geçersiz.
Özellik değeri 32 KB'tan büyük.
Ç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 silindi. Varlığın mevcut olduğundan emin olun. Yeniden deneme yardımcı olmaz.
MessageNotFoundException Belirli bir sıra numarasına sahip bir ileti almayı deneme. Bu ileti bulunamadı. İletinin henüz alınmadığından emin olun. İletinin geçersiz olup olmadığını görmek için, ölü ileti kuyruğuna bakın. Yeniden deneme yardımcı olmaz.
MessagingCommunicationException İstemci Service Bus ile bağlantı kuramıyor. Sağlanan ana bilgisayar adının doğru olduğundan ve konağa ulaşılabilir olduğundan emin olun.

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

Aralıklı bağlantı sorunları varsa yeniden deneme yardımcı olabilir.
ServerBusyException Hizmet şu anda isteği işleyemiyor. İstemci bir süre bekleyebilir ve işlemi yeniden deneyebilir. İstemci belirli bir aralıkta yeniden deneyebilir. Yeniden deneme farklı bir özel durumla sonuçlanırsa, bu özel durumun yeniden deneme davranışını denetleyin.
MessagingException Aşağıdaki durumlarda oluşturulabilecek genel mesajlaşma özel durumu:

Farklı bir varlık türüne (örneğin, bir konu) ait bir ad veya yol kullanılarak QueueClient oluşturmaya çalışılır.

256 KB'tan büyük bir ileti göndermeye çalışılır.

Sunucu veya hizmet, isteğin işlenmesi sırasında bir hatayla karşılaştı. Ayrıntılar için özel durum iletisine bakın. Bu genellikle geçici bir istisnadır.

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

Kodu denetleyin ve ileti gövdesi için yalnızca serileştirilebilir nesnelerin kullanıldığından emin olun (veya özel bir seri hale getirici kullanın).

Özelliklerin desteklenen değer türlerinin belgelerine bakın ve yalnızca desteklenen türleri kullanın.

IsTransient özelliğini denetleyin. Doğruysa işlemi yeniden deneyebilirsiniz.

Özel durumun nedeni azaltmaysa, birkaç saniye bekleyin ve işlemi yeniden deneyin. Yeniden deneme davranışı tanımlanmamıştır ve diğer senaryolarda yardımcı olmayabilir.
MessagingEntityAlreadyExistsException Bu hizmet ad alanındaki başka bir varlık tarafından zaten kullanılan bir ada sahip bir varlık oluşturmayı deneyin. Var olan 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 yüksek boyuta ulaştı veya bir ad alanına bağlantı sayısı üst sınırı aşıldı. Varlıktan veya alt sıralarından iletiler alarak varlıkta alan oluşturun. Bkz . QuotaExceededException. Bu arada iletilerin kaldırılması durumunda yeniden deneme yardımcı olabilir.
RuleActionException Geçersiz bir kural eylemi oluşturmaya çalışırsanız Service Bus bu özel durumu döndürür. Service Bus, bu ileti için kural eylemi işlenirken bir hata oluşursa bu özel durumu geçersiz bir iletiye ekler. Doğruluk için kural eylemini denetleyin. Yeniden deneme yardımcı olmaz.
FilterException Geçersiz bir filtre oluşturmaya çalışırsanız Service Bus bu özel durumu döndürür. Service Bus, bu ileti için filtre işlenirken bir hata oluştuysa, bu özel durumu geçersiz bir iletiye ekler. Filtrede doğruluk olup olmadığını denetleyin. Yeniden deneme yardımcı olmaz.
SessionCannotBeLockedException Belirli bir oturum kimliğine sahip bir oturumu kabul etmeye çalış, ancak oturum şu anda başka bir istemci tarafından kilitlenmiş. Oturumun kilidinin diğer istemciler tarafından açıldığından emin olun. Oturumun geçici olarak serbest bırakılması durumunda yeniden deneme yardımcı olabilir.
TransactionSizeExceededException İşlemin çok fazla işlemi vardır. Bu işlemin parçası olan işlem sayısını azaltın. Yeniden deneme yardımcı olmaz.
MessagingEntityDisabledException Devre dışı bırakılmış bir varlıkta çalışma zamanı işlemi isteği. Varlığı etkinleştirin. Varlık arada etkinleştirilmişse yeniden deneme yardımcı olabilir.
NoMatchingSubscriptionException Service Bus, ön filtrelemenin etkinleştirildiği ve filtrelerden hiçbirinin eşleşmediği bir konuya ileti gönderirseniz bu özel durumu döndürür. En az bir filtrenin eşleştiğinden 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 tüm .NET ek yüklerini içerebilen toplam ileti boyutudur. İleti yükünün boyutunu küçültün ve işlemi yeniden deneyin. Yeniden deneme yardımcı olmaz.
Transactionexception Ortam işlemi (Transaction.Current) geçersiz. Tamamlanmış veya durdurulmuş olabilir. İç özel durum ek bilgi sağlayabilir. Yeniden deneme yardımcı olmaz.
Transactionındoubtexception Şüpheli bir işlem üzerinde bir işlem denenmiştir veya işlemi işleme girişiminde bulunularak işlem şüpheli hale gelir. İşlem önceden işlenmiş olabileceğinden uygulamanızın bu özel durumu işlemesi gerekir (özel bir durum olarak). -

Quotaexceededexception

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

Dekont

Service Bus kotaları için bkz . Kotalar.

Kuyruklar ve konular

Kuyruklar ve konular için genellikle kuyruğun boyutu kullanılır. 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, konu başlığının boyut sınırını aştığını belirtir; bu durumda 1 GB (varsayılan boyut sınırı).

Ad Alanları

QuotaExceededException, ad alanları için bir uygulamanın ad alanına bağlantı sayısı üst sınırını aştığını gösterebilir. Örnek:

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

Olası nedenler

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

  1. Teslim edilemeyen ileti kuyruğu Bir okuyucu iletileri tamamlayamıyor ve kilit süresi dolduğunda iletiler kuyruğa/konuya döndürülüyor. Okuyucu, BrokeredMessage.Complete'i çağırmasını engelleyen bir özel durumla karşılaşırsa oluşabilir. İleti 10 kez okunduktan sonra, varsayılan olarak teslim edilemeyen ileti kuyruğuna geçer. Bu davranış QueueDescription.MaxDeliveryCount özelliği tarafından denetlenür ve varsayılan değeri 10'dur. İletiler teslim edilemeyen ileti kuyruğuna yığıldıkça yer kaplar.

    Sorunu çözmek için, diğer tüm kuyruklardan yaptığınız gibi, teslim edilemeyen ileti kuyruğundaki iletileri okuyun ve tamamlayın. Teslim edilemeyen kuyruk yolunu biçimlendirmeye yardımcı olması için FormatDeadLetterPath yöntemini kullanabilirsiniz.

  2. Alıcı durdu. Alıcı bir kuyruktan veya abonelikten ileti almayı durdurdu. Bunu tanımlamanın 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ıldığı kadar hızlı okunmuyor demektir.

TimeoutException

TimeoutException, kullanıcı tarafından başlatılan bir işlemin işlem zaman aşımı süresinden daha uzun sürdüğünü gösterir.

ServicePointManager.Default Bağlan ionLimit özelliğinin değerini denetlemeniz gerekir çünkü bu sınıra basılması timeoutException'a da neden olabilir.

Zaman aşımlarının, Service Bus hizmet güncelleştirmeleri (veya) hizmeti çalıştıran kaynaklardaki işletim sistemi güncelleştirmeleri gibi bakım işlemleri sırasında ya da bu işlemler arasında ortaya çıkması beklenir. İşletim sistemi güncelleştirmeleri sırasında varlıklar değişik yerlere taşınır ve düğümler güncelleştirilir veya yeniden başlatılır ve bunlar zaman aşımlarına neden olabilir. Azure Service Bus hizmetine ait hizmet düzeyi sözleşmesinin (SLA) ayrıntıları için bkz. Service Bus için SLA.

Kuyruklar ve konular

Kuyruklar ve konular için zaman aşımı MessagingFactory Ayarlar içinde belirtilir. operationTimeout özelliği, bağlantı dizesi parçası olarak veya ServiceBus Bağlan ionStringBuilder aracılığıyla. 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

Neden

MessageLockLostException, PeekLock Alma modu kullanılarak bir ileti alındığında oluşturulur ve istemci tarafından tutulan kilidin süresi hizmet tarafında dolar.

Çeşitli nedenlerden dolayı iletideki kilidin süresi dolabilir:

  • İstemci uygulaması tarafından yenilenmeden önce kilit zamanlayıcısının süresi doldu.
  • İstemci uygulaması kilidi aldı, kalıcı bir depoya kaydetti ve sonra yeniden başlatıldı. Yeniden başlatıldıktan sonra istemci uygulaması ışıklı iletilere baktı ve bunları tamamlamaya çalıştı.

Bu özel durumu aşağıdaki senaryolarda da alabilirsiniz:

  • Hizmet Güncelleştirmesi
  • İşletim sistemi güncelleştirmesi
  • Kilidi tutarken varlıkta (kuyruk, konu, abonelik) özellikleri değiştirme.

Çözünürlük

bir istemci uygulaması MessageLockLostException aldığında, artık iletiyi işleyemez. İstemci uygulaması isteğe bağlı olarak analiz için özel durumu günlüğe kaydetmeyi göz önünde bulundurabilir, ancak istemcinin iletiyi atması gerekir .

İletideki kilidin süresi dolduğundan, Kuyruk'a (veya Abonelik) geri döner ve çağrının aldığı sonraki istemci uygulaması tarafından işlenebilir.

MaxDeliveryCount aşıldıysa, ileti DeadLetterQueue'a taşınabilir.

SessionLockLostException

Neden

SessionLockLostException, bir oturum kabul edildiğinde oluşturulur ve istemci tarafından tutulan kilidin süresi hizmet tarafında dolar.

Bir oturumdaki kilidin süresi çeşitli nedenlerle dolabilir:

  • İstemci uygulaması tarafından yenilenmeden önce kilit zamanlayıcısının süresi doldu.
  • İstemci uygulaması kilidi aldı, kalıcı bir depoya kaydetti ve sonra yeniden başlatıldı. Yeniden başlatıldıktan sonra istemci uygulaması ışıklı oturumlara baktı ve bu oturumlardaki iletileri işlemeye çalıştı.

Bu özel durumu aşağıdaki senaryolarda da alabilirsiniz:

  • Hizmet Güncelleştirmesi
  • İşletim sistemi güncelleştirmesi
  • Kilidi tutarken varlıkta (kuyruk, konu, abonelik) özellikleri değiştirme.

Çözünürlük

bir istemci uygulaması SessionLockLostException aldığında, artık oturumdaki iletileri işleyemez. İstemci uygulaması analiz için özel durumu günlüğe kaydetmeyi göz önünde bulundurabilir, ancak istemcinin iletiyi atması gerekir .

Oturumdaki kilidin süresi dolduğundan, kuyrukta (veya Abonelikte) geri döner ve oturumu kabul eden sonraki istemci uygulaması tarafından kilitlenebilir. Oturum kilidi herhangi bir zamanda tek bir istemci uygulaması tarafından tutulduğundan, sıralı işleme garanti edilir.

SocketException

Neden

Aşağıdaki durumlarda bir SocketException oluşturulur:

  • Ana bilgisayar belirtilen süreden sonra düzgün yanıt vermediğinden bağlantı girişimi başarısız olduğunda (TCP hata kodu 10060).
  • Bağlı ana bilgisayar yanıt veremediği için kurulan bağlantı başarısız oldu.
  • İleti işlenirken bir hata oluştu veya zaman aşımı uzak konak tarafından aşıldı.
  • Temel alınan ağ kaynağı sorunu.

Çözünürlük

SocketException hataları, uygulamaları barındıran VM'nin adı <mynamespace>.servicebus.windows.net ilgili IP adresine dönüştüremediğini gösterir.

Aşağıdaki komutun bir IP adresine eşlemede başarılı olup olmadığını denetleyin.

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

Bu, aşağıdaki gibi bir çıkış sağlamalıdır:

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ümlenmiyorsa daha fazla araştırma yapmak için ağ yöneticisine başvurun. Ad çözümlemesi genellikle müşteri ağındaki bir DNS sunucusu aracılığıyla yapılır. DNS çözümlemesi Azure DNS tarafından yapılırsa Azure desteği başvurun.

Ad çözümlemesi beklendiği gibi çalışıyorsa burada Azure Service Bus bağlantılarına izin verilip verilmediğini denetleyin.

MessagingException

Neden

MessagingException , çeşitli nedenlerle oluşturulabilecek genel bir özel durumdur. Nedenlerden bazıları şunlardır:

  • Konu veya Abonelikte QueueClient oluşturmaya çalışılır.
  • Gönderilen iletinin boyutu, belirtilen katmanın sınırından büyük. Service Bus kotaları ve sınırları hakkında daha fazla bilgi edinin.
  • 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.

Dekont

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

Çözünürlük

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

  • Geçici sorunlar için (burada Çeviri 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 durumdaki ayrıntılar sorunun ve çözüm adımlarının aynı şekilde çıkarılabildiğini gösterir.

Depolama QuotaExceededException

Neden

Depolama QuotaExceededException, premium ad alanında varlıkların toplam boyutu mesajlaşma birimi başına 1 TB sınırını aştığında oluşturulur.

Çözünürlük

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

Sonraki adımlar

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