Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Service Bus .NET istemci kitaplığı, bir hizmet işlemi veya istemci bir hatayla karşılaştığında özel durumlar ortaya çıkar. Mümkün olduğunda, hata bilgilerini iletmek için standart .NET özel durum türleri kullanılır. Service Bus'a özgü senaryolar için bir ServiceBusException oluşturulur.
Service Bus istemcileri, yapılandırılmış yeniden deneme seçeneklerini izleyerek geçici olarak kabul edilen özel durumları otomatik olarak yeniden dener. Uygulamaya bir özel durum uygulandığında, tüm yeniden denemeler başarısız olarak uygulanır veya özel durum geçici olarak kabul edilir. Yeniden deneme seçeneklerini yapılandırma hakkında daha fazla bilgi, Yeniden deneme seçeneklerini özelleştirme örneğinde bulunabilir.
ServiceBusException
Özel durum, hatanın bağlamını ve göreli önem derecesini anlamanıza yardımcı olacak bağlamsal bilgiler içerir.
-
EntityPath: Varsa, özel durumun oluştuğu Service Bus varlığını tanımlar. -
IsTransient: Özel durumun kurtarılabilir olarak kabul edilip edilmeyeceğini gösterir. Geçici olduğu durumlarda, Azure Service Bus uygun yeniden deneme ilkesini zaten uyguladı ve tüm yeniden denemeler başarısız oldu. -
Message: Oluşan hatanın açıklamasını ve ilgili bağlamı sağlar. -
StackTrace: Hatanın oluştuğu koddaki konumu vurgulayarak çağrı yığınının anlık çerçevelerini temsil eder. -
InnerException: Bir özel durum bir hizmet işleminin sonucu olduğunda, bu genellikle OASIS Gelişmiş Message Queuing Protokolü (AMQP) 1.0 belirtimini izleyerek hatayı açıklayan birMicrosoft.Azure.Amqp.AmqpExceptionörnektir. -
Reason: Başarısızlığın kök nedenini kategorilere ayırmaya ve netleştirmeye yardımcı olan iyi bilinen nedenler kümesi sağlar. Bu değerler, özel durum filtreleme ve özel durum iletisinin metninin incelenmesinin ideal olmayacağı diğer mantığın uygulanmasına izin vermek için tasarlanmıştır. Bazı önemli hata nedenleri şunlardır:ServiceTimeout: Service Bus hizmetinin beklenen süre içinde bir işlem isteğine yanıt vermediğini gösterir. Geçici bir ağ sorunundan veya hizmet sorunundan kaynaklanıyor olabilir. Service Bus hizmeti isteği başarıyla tamamlamış veya tamamlamamış olabilir; durum bilinmiyor. Bir sonraki kullanılabilir oturum bağlamında, bu özel durum varlıkta kilidi açılmış oturum olmadığını gösterir. Bu hatalar, otomatik olarak yeniden denenen geçici hatalardır.QuotaExceeded: Genellikle tek bir varlık için çok fazla etkin alma işlemi olduğunu gösterir. Bu hatayı önlemek için olası eşzamanlı alma sayısını azaltın. Alma isteği başına birden çok ileti almaya çalışmak için toplu alma işlemlerini kullanabilirsiniz. Daha fazla bilgi için bkz . Service Bus kotaları.MessageSizeExceeded: İleti boyutunun maksimum ileti boyutunu aştığını gösterir. İleti boyutu, iletinin gövdesini ve ilişkili meta verileri içerir. Bu hatayı çözmek için en iyi yaklaşım, toplu olarak gönderilen iletilerin sayısını veya iletiye dahil edilen gövde boyutunu azaltmaktır. Boyut sınırları değiştirilebilir olduğundan bkz . Ayrıntılar için Service Bus kotaları .MessageLockLost: İletideki kilidin kaybolduğunu gösterir. Arayanlar iletiyi almaya ve yeniden işlemeye çalışmalıdır. Bu özel durum yalnızca oturum kullanmayan varlıklar için geçerlidir. İşlem kilit süresinden uzun sürerse ve ileti kilidi yenilenmediyse bu hata oluşur. Bu hata, geçici bir ağ sorunu nedeniyle bağlantının ayrılması veya bağlantının 10 dakika boşta olması durumunda da oluşabilir.Service Bus hizmeti durum bilgisi olan AMQP protokollerini kullanır. Protokolün doğası gereği, istemciyi ve hizmeti bağlayan bağlantı bir ileti alındıktan sonra ayrılırsa, ancak ileti tamamlanmadan önce, ileti bağlantıyı yeniden bağlamaya yerleşemez. Bağlantılar kısa süreli geçici ağ hatası, ağ kesintisi veya hizmetin 10 dakikalık boşta kalma süresinden dolayı ayrılabilir. Bağlantının yeniden bağlanması, bağlantıyı gerektiren herhangi bir işlemin bir parçası olarak otomatik olarak gerçekleşir, yani iletilerin yerleşmesi veya alınması. Bu davranış nedeniyle, kilit süre sonu süresi henüz geçirilmemiş olsa bile ile veya ile
ReasonMessageLockLostSessionLockLostkarşılaşabilirsiniz.ServiceBusExceptionSessionLockLost: Oturumdaki kilidin süresinin dolduğunu gösterir. Arayanlar oturumu yeniden kabul etmeye çalışmalıdır. Bu özel durum yalnızca oturum etkin varlıklar için geçerlidir. İşlem kilit süresinden uzun sürerse ve oturum kilidi yenilenmediyse bu hata oluşur. Bu hata, geçici bir ağ sorunu nedeniyle bağlantının ayrılması veya bağlantının 10 dakika boşta olması durumunda da oluşabilir. Service Bus hizmeti durum bilgisi olan AMQP protokollerini kullanır. Protokolün doğası gereği, istemciyi ve hizmeti bağlayan bağlantı bir ileti alındıktan sonra ayrılırsa, ancak ileti tamamlanmadan önce, ileti bağlantıyı yeniden bağlamaya yerleşemez. Bağlantılar kısa süreli geçici ağ hatası, ağ kesintisi veya hizmetin 10 dakikalık boşta kalma süresinden dolayı ayrılabilir. Bağlantının yeniden bağlanması, bağlantıyı gerektiren herhangi bir işlemin bir parçası olarak otomatik olarak gerçekleşir, yani iletilerin yerleşmesi veya alınması. Bu davranış nedeniyle, kilit süre sonu süresi henüz geçmemiş olsa bile ile veya ileReasonMessageLockLostSessionLockLostkarşılaşabilirsiniz.ServiceBusExceptionMessageNotFound: Bu hata, varlıkta mevcut olmayan veya şu anda kilitli olan bir ileti için sıra numarasına göre ertelenen bir ileti almaya çalışırken oluşur.SessionCannotBeLocked: Kilit zaten başka bir yerde tutulmuş olduğundan istenen oturumun kilitlenemiyor olduğunu gösterir. Kilidin süresi dolduktan sonra oturum kabul edilebilir.GeneralError: Service Bus hizmetinin isteği işlerken bir hatayla karşılaştığını gösterir. Hizmet yükseltmeleri ve yeniden başlatmaları genellikle bu hataya neden olur. Bu hatalar, otomatik olarak yeniden denenen geçici hatalardır.ServiceCommunicationProblem: Hizmetle iletişim kurarken bir hata olduğunu gösterir. Sorun geçici bir ağ sorunundan veya hizmet sorunundan kaynaklanıyor olabilir. Bu hatalar, otomatik olarak yeniden denenecek geçici hatalardır.ServiceBusy: Hizmetin isteği kısıtladığını gösterir. Bir isteğin kısıtlanmasının nelere neden olabileceğini ve kısıtlanmasının nasıl önlendiğini açıklayan ayrıntılar burada bulunabilir. Kısıtlanmış istekler yeniden deneniyor, ancak istemci kitaplığı aynıServiceBusClient(veya bu istemciden oluşturulan alt türleri) kullanarak daha fazla istek denemeden önce otomatik olarak 10 saniyelik geri alma işlemi uyguluyor. Varlığınızın kilit süresi 10 saniyeden kısaysa sorunlara neden olabilir çünkü ileti veya oturum kilitleri, düzeltilmemiş iletiler veya kilitli oturumlar için kaybolabilir. Kısıtlanmış istekler başarıyla yeniden denendiğinden, oluşturulan özel durumlar hatalar yerine uyarı olarak günlüğe kaydedilir - belirli uyarı düzeyi olay kaynağı olayı 43'tür (RunOperation bir özel durumla karşılaştı ve yeniden deneme gerçekleşir.).MessagingEntityAlreadyExists: Aynı ad alanında aynı ada sahip bir varlığın bulunduğunu gösterir.MessagingEntityDisabled: Mesajlaşma Varlığı devre dışı bırakıldı. Portalı kullanarak varlığı yeniden etkinleştirin.MessagingEntityNotFound: Service Bus hizmeti bir Service Bus kaynağı bulamıyor.
ServiceBusException İşle - örnek
Burada, ve ServiceBusException filtresini ile işlemeye ilişkin bir örnek verilmiştır Reason.
try
{
// Receive messages using the receiver client
}
catch (ServiceBusException ex) when
(ex.Reason == ServiceBusFailureReason.ServiceTimeout)
{
// Take action based on a service time out
}
Diğer yaygın özel durumlar
-
ArgumentException: İstemci, istemciyle etkileşim kurarken sağlanan bir parametrenin geçersiz olduğu durumlardan türetilenArgumentExceptionbu özel durumu oluşturur. Belirli parametre ve sorunun doğası hakkındaki bilgileri içindeMessagebulabilirsiniz. -
InvalidOperationException: Geçerli yapılandırması için geçerli olmayan bir işlemi gerçekleştirmeye çalışırken gerçekleşir. Bu özel durum genellikle bir istemci işlemi destekleyecek şekilde yapılandırılmadığında oluşur. Genellikle, istemciye geçirilen seçenekler ayarlanarak azaltılabilir. -
NotSupportedException: İstenen bir işlem istemci için geçerli olduğunda, ancak geçerli durumu tarafından desteklenmediğinde gerçekleşir. Senaryo hakkındaki bilgileri içindeMessagebulabilirsiniz. -
AggregateException: Bir işlem birden çok özel durumla karşılaşabileceğinden ve bunları tek bir hata olarak ortaya çıkardığında gerçekleşir. Bu özel durum en yaygın olarak Service Bus işlemcisini veya Service Bus oturum işlemcisini başlatırken veya durdururken karşılaşılır.
Neden: QuotaExceeded
Nedeni olarak ayarlanmış QuotaExceeded ServiceBusException, belirli bir varlık için kotanın aşıldığını gösterir.
Not
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:
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ı
QuotaExceeded özel durumu, ad alanları için bir uygulamanın ad alanına bağlantı sayısı üst sınırını aştığını gösterebilir. Örneğin:
<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: teslim edilemeyen ileti kuyruğu ve işlevsiz ileti alıcıları.
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, iletiyi tamamlaması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. MaxDeliveryCount özelliği, varsayılan değeri 10 olan bu davranışı denetler. İ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.
Alıcı durdu. Alıcı bir kuyruktan veya abonelikten ileti almayı durdurdu. Sorunu tanımlamanın yolu, etkin ileti sayısına bakmaktır. Etkin ileti sayısı yüksekse veya artıyorsa, iletiler yazıldığı kadar hızlı okunmuyor demektir.
Neden: MessageLockLost
Neden
Nedeni ayarlanmış ServiceBusException, PeekLock Alma modu kullanılarak bir ileti alındığını ve istemci tarafından tutulan kilidin hizmet tarafında süresinin dolduğunu gösterir.MessageLockLost
Ç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 iletileri 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üm
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, kuyrukta (veya Abonelikte) geri döner ve almayı çağıran sonraki istemci uygulaması tarafından işlenebilir.
MaxDeliveryCount aşılırsa, ileti DeadLetterQueue'a taşınabilir.
Neden: SessionLockLost
Neden
Bir oturumdaki kilidin süresi çeşitli nedenlerle dolabilir:
- İstemci uygulaması yenilemeden önce kilit süreölçerinin 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üm
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, Kuyruk'a (veya Abonelik) 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.
TimeoutException
TimeoutException, kullanıcı tarafından başlatılan bir işlemin işlem zaman aşımından daha uzun sürdüğünü gösterir.
ServicePointManager.DefaultConnectionLimit özelliğinin değerini denetlemeniz gerekir çünkü bu sınıra basmak timeoutException'a da neden olabilir.
Hizmeti çalıştıran kaynaklarda Service Bus hizmet güncelleştirmeleri (veya) işletim sistemi güncelleştirmeleri gibi bakım işlemleri sırasında veya bunlar arasında zaman aşımlarının gerçekleşmesi beklenir. İş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 ve bu da 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.
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 uzak konak zaman aşımını aştı.
- Temel alınan ağ kaynağı sorunu.
Çözüm
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
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.
UnauthorizedAccessException
UnauthorizedAccessException, sağlanan kimlik bilgilerinin istenen eylemin gerçekleştirilebilmesine izin vermediğini gösterir. özelliği hatayla Message ilgili ayrıntıları içerir.
oluştururken sağlanan yetkilendirme türüne bağlı olarak bu doğrulama adımlarını ServiceBusClientizlemenizi öneririz.
- bağlantı dizesi doğru olduğundan emin olun
- SAS belirtecinin doğru oluşturulduğunu doğrulama
- Doğru rol tabanlı erişim denetimi (RBAC) rollerinin verildiğini doğrulayın
Coğrafi Çoğaltma özel durumları
ServerBusyException
Nedenler
- Zaman uyumsuz çoğaltma sırasında (çoğaltma gecikmesi sıfırdan büyük), istemci bir hizmet veri yolu varlığında (kuyruk, konu) bir işlem gerçekleştirmeye çalışır veya bir yönetim işlemi gerçekleştirir, ancak birincil ve ikincil bölgeler arasındaki çoğaltma gecikmesi izin verilen en yüksek çoğaltma gecikmesini saniyeler içinde aştığından işlem tamamlanamıyor.
- Örnek: Yeni çoğaltma gecikmesi 38.323 saniyeye ulaşacağından ve bu da ayarlanan çoğaltma gecikmesi üst sınırından (300 saniye) fazla olacağından işlem kısıtlanıyor. Çoğaltılmakta olan en son işlem için geçerli çoğaltma gecikmesi 0 saniyedir.
- Bir varlığın çoğaltma kuyruğu bayt cinsinden en büyük boyutunu aşıyor. Çoğaltma kuyruğunun bayt cinsinden boyut üst sınırı, Service Bus tarafından ayarlanan bir iç sınırdır.
- Örnek: Çoğaltma kuyruğu boyutu 73128000 eşik 67108864 aşıldı.
- Zaman uyumlu çoğaltmada, başka bir isteğin çoğaltılması beklenirken istek zaman aşımına uğradı.
-
Örnek: için
<NAMESPACE>/<ENTITYNAME>istemci uygulamasından gelen yüksek hacimli istek sayısı. Diğer bölgelere çoğaltma devam ediyor.
-
Örnek: için
Çözüm
- İstemci, hizmetin kendi iş yükünü işlemesi için zaman vermek üzere geri dönmeli, ardından istemci yeniden denemelidir.
Zaman aşımı
Neden
- Geo DR'de zaman aşımı özel durumu, işlemin istemci tarafından sağlanan zaman aşımı içinde tamamlanmadığını gösterir.
- Zaman uyumlu çoğaltmada, bir işlemin birincil bölge yazma ve ikincil bölgelere çoğaltma işlemi zaman aşımı kapsamındadır.
- Zaman uyumsuz çoğaltmada, bir işlemin birincil bölge yazma işlemi zaman aşımı kapsamındadır, ancak bir işlemin ikincil bölgelere çoğaltması işlemin zaman aşımı kapsamında değildir.
-
Örnek: İşlem, nesne iletisi için ayrılan 00:01:00 saatinde tamamlanmadı. (
ServiceTimeout).
Çözüm
- İstemci işlemi yeniden denemelidir.
- Zaman aşımına uğradı işleminin bazı adımları tamamlanmış olabilir. Zaman aşımına uğradı işlemi birincil bölgeye ve bazı ikincil bölgelere yazılmış olabilir. Bir işlem birincil bölgeye yazıldıysa, istemci zaman aşımından bağımsız olarak sonunda tüm ikincil bölgelere çoğaltılır.
BadRequest
Neden
- Planlı yük devretme sırasında, ikincil bölgenin yakalamasına izin vermek için birincil bölge geçici olarak salt okunur olarak ayarlanır. İstemci bu geçici salt okunur durumdayken birincil bölgeye bir yazma işlemi denerse, istemci bir BadRequest özel durumu alır.
- Örnek: Çoğaltma rolü anahtarı devam ediyor, birincil çoğaltma:<varlık-adı> ReadOnly şeklindedir.
Çözüm
- Yazma işlemlerinin başarılı olması için istemcinin planlı yük devretmenin tamamlanmasını beklemesi gerekir.
- Planlı yük devretmenin çok uzun sürmesi durumunda, bunun yerine zorlamalı yük devretme tetikleme mümkündür.
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.