Bus Layanan pengecualian olahpesan (tidak digunakan lagi)

Artikel ini mencantumkan pengecualian .NET yang dihasilkan oleh API .NET Framework.

Pada 30 September 2026, kami akan menghentikan pustaka Azure Bus Layanan SDK WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus, dan com.microsoft.azure.servicebus, yang tidak sesuai dengan panduan Azure SDK. Kami juga akan mengakhiri dukungan protokol SBMP, sehingga Anda tidak akan lagi dapat menggunakan protokol ini setelah 30 September 2026. Migrasikan ke pustaka Azure SDK terbaru, yang menawarkan pembaruan keamanan penting dan kemampuan yang ditingkatkan, sebelum tanggal tersebut.

Meskipun pustaka lama masih dapat digunakan melebihi 30 September 2026, pustaka tersebut tidak akan lagi menerima dukungan dan pembaruan resmi dari Microsoft. Untuk informasi selengkapnya, lihat pengumuman penghentian dukungan.

Kategori pengecualian

API olahpesan menghasilkan pengecualian yang dapat digolongkan ke dalam kategori berikut, bersama tindakan terkait yang dapat Anda lakukan untuk mencoba memperbaikinya. Arti dan penyebab pengecualian dapat bervariasi, bergantung pada jenis entitas pesan:

  1. Kesalahan pengodean pengguna (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Tindakan umum: coba perbaiki kode sebelum melanjutkan.
  2. Kesalahan penyiapan/konfigurasi (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Tindakan umum: tinjau konfigurasi Anda dan ubah jika perlu.
  3. Pengecualian sementara(Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.Messaging.MessagingCommunicationException). Tindakan umum: coba kembali operasi atau beri tahu pengguna. Kelas RetryPolicy di SDK klien dapat dikonfigurasi untuk menangani coba ulang secara otomatis. Untuk informasi selengkapnya, lihat Pedoman coba lagi.
  4. Pengecualian lain (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Tindakan umum: khusus untuk jenis pengecualian; lihat tabel di bagian berikut:

Penting

  • Azure Service Bus tidak mencoba kembali operasi jika ada pengecualian saat operasi berada dalam cakupan transaksi.
  • Untuk panduan coba lagi khusus untuk Azure Bus Layanan, lihat Panduan coba lagi untuk Bus Layanan.

Jenis pengecualian

Tabel berikut ini mencantumkan jenis pengecualian olahpesan, dan penyebabnya, dan mencatat tindakan yang disarankan yang bisa Anda lakukan.

Jenis Pengecualian Deskripsi/Penyebab/Contoh Tindakan yang Disarankan Catatan tentang coba lagi otomatis/langsung
TimeoutException Server tidak menanggapi operasi yang diminta dalam waktu yang ditentukan, yang dikontrol oleh OperationTimeout. Server mungkin telah menyelesaikan operasi yang diminta. Ini bisa terjadi karena jaringan atau keterlambatan infrastruktur lainnya. Periksa status sistem untuk konsistensi dan coba lagi jika perlu. Lihat Pengecualian waktu habis. Coba lagi mungkin membantu dalam beberapa kasus; tambahkan logika coba lagi ke kode.
InvalidOperationException Operasi pengguna yang diminta tidak diperbolehkan di dalam server atau layanan. Lihat pesan pengecualian untuk detailnya. Misalnya, Complete() menghasilkan pengecualian ini jika pesan diterima dalam mode ReceiveAndDelete. Periksa kode dan dokumentasi. Pastikan operasi yang diminta valid. Coba lagi tidak membantu.
OperationCanceledException Upaya dilakukan untuk memanggil operasi pada objek yang telah ditutup, dibatalkan, atau dibuang. Dalam kasus yang jarang terjadi, transaksi sekitar sudah dibuang. Periksa kode dan pastikan kode tidak memanggil operasi pada objek yang sudah dibuang. Coba lagi tidak membantu.
UnauthorizedAccessException Objek TokenProvider tidak dapat memperoleh token, token tidak valid, atau token tidak berisi klaim yang diperlukan untuk melakukan operasi. Pastikan penyedia token dibuat dengan nilai yang benar. Periksa konfigurasi Layanan Kontrol Akses. Coba lagi mungkin membantu dalam beberapa kasus; tambahkan logika coba lagi ke kode.
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Satu atau beberapa argumen yang diberikan ke metode ini tidak valid.
URI yang disediakan ke NamespaceManager atau Buat berisi segmen jalur.
Skema URI yang diberikan ke NamespaceManager atau Create tidak valid.
Nilai properti lebih besar dari 32 KB.
Periksa kode panggil dan pastikan argumennya benar. Coba lagi tidak membantu.
MessagingEntityNotFoundException Entitas yang terkait dengan operasi tidak ada atau telah dihapus. Pastikan entitas ada. Coba lagi tidak membantu.
MessageNotFoundException Coba menerima pesan dengan nomor urut tertentu. Pesan ini tidak ditemukan. Pastikan pesan belum diterima. Periksa antrean deadletter untuk melihat apakah pesan telah di-deadletter. Coba lagi tidak membantu.
MessagingCommunicationException Klien tidak dapat membuat koneksi ke Service Bus. Pastikan nama host yang disediakan sudah benar dan host dapat dijangkau.

Jika kode Anda dijalankan di lingkungan dengan firewall/proksi, pastikan lalu lintas ke domain/alamat IP Service Bus dan port tidak diblokir.

Coba lagi mungkin membantu jika ada masalah konektivitas terputus-terputus.
ServerBusyException Layanan tidak dapat memproses permintaan saat ini. Klien dapat menunggu dalam jangka waktu tertentu, lalu mencoba kembali operasi. Klien mungkin mencoba kembali setelah interval tertentu. Jika coba lagi menghasilkan pengecualian yang berbeda, periksa perilaku coba lagi pengecualian tersebut.
MessagingException Pengecualian olahpesan generik yang mungkin dilemparkan dalam kasus berikut:

Upaya dilakukan untuk membuat QueueClient menggunakan nama atau jalur milik jenis entitas yang berbeda (misalnya, topik).

Upaya dilakukan untuk mengirim pesan yang lebih besar dari 256 KB.

Server atau layanan mengalami kesalahan selama pemrosesan permintaan. Lihat pesan pengecualian untuk detailnya. Ini biasanya pengecualian sementara.

Permintaan dihentikan karena entitas sedang dibatasi. Kode kesalahan: 50001, 50002, 50008.

Periksa kode dan pastikan bahwa hanya objek yang dapat diserialkan yang digunakan untuk isi pesan (atau gunakan pembuat serialisasi kustom).

Periksa dokumentasi untuk jenis nilai properti yang didukung dan hanya gunakan jenis yang didukung.

Periksa properti IsTransient. Jika itu benar, Anda dapat mencoba lagi operasi.

Jika pengecualian karena pembatasan, tunggu beberapa detik dan coba lagi operasi. Perilaku coba lagi tidak terdefinisi dan mungkin tidak membantu dalam skenario lain.
MessagingEntityAlreadyExistsException Mencoba membuat entitas dengan nama yang sudah digunakan oleh entitas lain di namespace layanan tersebut. Hapus entitas yang ada atau pilih nama yang berbeda untuk entitas yang akan dibuat. Coba lagi tidak membantu.
QuotaExceededException Entitas olahpesan telah mencapai ukuran maksimum yang diperbolehkan, atau jumlah maksimum koneksi ke namespace telah terlampaui. Buat ruang di entitas dengan menerima pesan dari entitas atau subque-nya. Lihat QuotaExceededException. Coba lagi mungkin membantu jika pesan telah dihapus sementara ini.
RuleActionException Service Bus mengembalikan pengecualian ini jika Anda mencoba membuat tindakan aturan yang tidak valid. Service Bus melampirkan pengecualian ini ke pesan yang di-deadletter jika terjadi kesalahan saat memproses tindakan aturan untuk pesan tersebut. Periksa tindakan aturan untuk tindakan yang benar. Coba lagi tidak membantu.
FilterException Service Bus mengembalikan pengecualian ini jika Anda mencoba membuat filter yang tidak valid. Service Bus melampirkan pengecualian ini ke pesan yang di-deadletter jika terjadi kesalahan saat memproses filter untuk pesan tersebut. Periksa filter untuk tindakan yang benar. Coba lagi tidak membantu.
SessionCannotBeLockedException Mencoba menerima sesi dengan ID sesi tertentu, tetapi sesi saat ini dikunci oleh klien lain. Pastikan sesi dibuka oleh klien lain. Coba lagi mungkin membantu jika sesi telah dirilis di sementara.
TransactionSizeExceededException Terlalu banyak operasi adalah bagian dari transaksi. Kurangi jumlah operasi yang menjadi bagian dari transaksi ini. Coba lagi tidak membantu.
MessagingEntityDisabledException Meminta operasi runtime pada entitas yang dinonaktifkan. Aktifkan entitas. Coba lagi dapat membantu jika entitas telah diaktifkan untuk sementara.
NoMatchingSubscriptionException Bus Layanan mengembalikan pengecualian ini jika Anda mengirim pesan ke topik yang mengaktifkan prafilter dan tidak ada filter yang cocok. Pastikan setidaknya satu filter cocok. Coba lagi tidak membantu.
MessageSizeExceededException Muatan pesan melebihi batas 256-KB. Batas 256-KB ini adalah ukuran pesan total yang dapat mencakup properti sistem dan overhead .NET apa pun. Kurangi ukuran payload pesan, lalu coba lagi operasi. Coba lagi tidak membantu.
TransactionException Transaksi sekitar (Transaction.Current) tidak valid. Mungkin telah selesai atau dibatalkan. Pengecualian dalam mungkin memberikan informasi tambahan. Coba lagi tidak membantu.
TransactionInDoubtException Operasi dicoba pada transaksi yang diragukan, atau upaya dilakukan untuk melakukan transaksi dan transaksi menjadi diragukan. Aplikasi Anda harus menangani pengecualian ini (sebagai kasus khusus), karena transaksi mungkin telah dilakukan. -

QuotaExceededException

QuotaExceededException menunjukkan bahwa kuota untuk entitas tertentu telah terlampaui.

Catatan

Untuk kuota Bus Layanan, lihat Kuota.

Antrean dan topik

Untuk antrean dan topik, masalah yang terjadi berkaitan dengan ukuran antrean. Properti pesan kesalahan berisi detail selengkapnya, seperti dalam contoh berikut:

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

Pesan menyatakan bahwa topik melebihi batas ukurannya, dalam hal ini 1 GB (batas ukuran default).

Namespace

Untuk namespace, QuotaExceededException dapat menunjukkan bahwa aplikasi telah melebihi jumlah maksimum koneksi ke namespace. Contohnya:

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

Penyebab umum

Ada dua penyebab umum untuk kesalahan ini: antrean surat mati, dan penerima pesan yang tidak berfungsi.

  1. Antrean dead-letter Pembaca gagal menyelesaikan pesan dan pesan dikembalikan ke antrean/topik saat kunci kedaluwarsa. Ini dapat terjadi jika pembaca menemukan pengecualian yang mencegahnya memanggil BrokeredMessage.Complete. Setelah pesan dibaca 10 kali, pesan akan berpindah ke antrean dead-letter secara default. Perilaku ini dikendalikan oleh properti QueueDescription.MaxDeliveryCount dan memiliki nilai default 10. Ketika menumpuk dalam antrean dead letter, pesan memenuhi ruang.

    Untuk mengatasi masalah ini, baca dan selesaikan pesan dari antrean dead-letter, seperti yang Anda lakukan dari antrean lainnya. Anda dapat menggunakan metode FormatDeadLetterPath untuk membantu memformat jalur antrean dead-letter.

  2. Penerima berhenti. Penerima berhenti menerima pesan dari antrean atau langganan. Cara mengidentifikasi ini adalah dengan melihat properti QueueDescription.MessageCountDetails yang menunjukkan perincian lengkap pesan. Jika properti ActiveMessageCount tinggi atau berkembang, maka pesan tidak dibaca secepat ditulis.

TimeoutException

TimeoutException menunjukkan bahwa operasi yang dimulai pengguna memakan waktu lebih lama dari batas waktu operasi.

Anda harus memeriksa nilai properti ServicePointManager.DefaultConnectionLimit karena mencapai batas ini juga dapat menyebabkan TimeoutException.

Batas waktu diperkirakan akan terjadi selama atau di antara operasi pemeliharaan seperti pembaruan layanan Service Bus (atau) pembaruan OS pada sumber daya yang menjalankan layanan. Selama pembaruan OS, entitas dipindahkan dan node diperbarui atau di-boot ulang, yang dapat menyebabkan waktu habis. Untuk detail perjanjian tingkat layanan (SLA) untuk layanan Azure Service Bus, lihat SLA untuk Service Bus.

Antrean dan topik

Untuk antrean dan topik, batas waktu ditentukan baik di properti MessagingFactorySettings.OperationTimeout, sebagai bagian dari string koneksi, atau melalui ServiceBusConnectionStringBuilder. Pesan kesalahan itu sendiri mungkin berbeda-beda, tetapi selalu berisi nilai batas waktu yang ditentukan untuk operasi saat ini.

MessageLockLostException

Penyebab

MessageLockLostException ditampilkan ketika pesan diterima menggunakan mode Terima PeekLock dan kunci yang dimiliki klien kedaluwarsa di sisi layanan.

Kunci pada pesan mungkin kedaluwarsa karena berbagai alasan:

  • Timer kunci kedaluwarsa sebelum diperbarui oleh aplikasi klien.
  • Aplikasi klien memperoleh kunci, menyimpannya ke penyimpanan permanen, kemudian memulai ulang. Setelah memulai ulang, aplikasi klien melihat pesan inflight dan mencoba menyelesaikannya.

Anda mungkin juga menerima pengecualian ini dalam skenario berikut:

  • Pembaruan Layanan
  • Pembaruan OS
  • Mengubah properti pada entitas (antrean, topik, langganan) sambil menahan kunci.

Resolusi

Ketika aplikasi klien menerima MessageLockLostException, aplikasi klien tidak dapat lagi memproses pesan. Aplikasi klien mungkin secara opsional mempertimbangkan pengelogan pengecualian untuk analisis, tetapi klien harus membuang pesan.

Karena kunci pada pesan telah kedaluwarsa, kunci akan kembali pada Antrean (atau Langganan) dan dapat diproses oleh aplikasi klien berikutnya yang memanggil menerima.

Jika MaxDeliveryCount telah terlampaui, maka pesan mungkin dipindahkan ke DeadLetterQueue.

SessionLockLostException

Penyebab

SessionLockLostException ditampilkan ketika sesi diterima dan kunci yang dipegang oleh klien kedaluwarsa di sisi layanan.

Kunci pada sesi mungkin kedaluwarsa karena berbagai alasan:

  • Timer kunci kedaluwarsa sebelum diperbarui oleh aplikasi klien.
  • Aplikasi klien memperoleh kunci, menyimpannya ke penyimpanan permanen, kemudian memulai ulang. Setelah memulai ulang, aplikasi klien melihat sesi inflight dan mencoba memproses pesan dalam sesi tersebut.

Anda mungkin juga menerima pengecualian ini dalam skenario berikut:

  • Pembaruan Layanan
  • Pembaruan OS
  • Mengubah properti pada entitas (antrean, topik, langganan) sambil menahan kunci.

Resolusi

Ketika aplikasi klien menerima SessionLockLostException, aplikasi klien tidak dapat lagi memproses pesan pada sesi. Aplikasi klien mungkin mempertimbangkan untuk mencatat pengecualian untuk analisis, tetapi klien harus membuang pesan.

Karena kunci pada sesi telah kedaluwarsa, itu akan kembali pada Antrean (atau Langganan) dan dapat dikunci oleh aplikasi klien berikutnya yang menerima sesi. Karena kunci sesi dimiliki satu aplikasi klien pada waktu tertentu, pemrosesan sesuai urutan terjamin.

SocketException

Penyebab

SocketException ditampilkan dalam kasus di bawah ini:

  • Ketika upaya koneksi gagal karena host tidak merespons dengan benar setelah waktu yang ditentukan (kode kesalahan TCP 10060).
  • Sambungan yang dibuat gagal karena host tersambung gagal merespons.
  • Terjadi kesalahan saat memproses pesan atau waktu habis terlampaui oleh host jarak jauh.
  • Masalah sumber daya jaringan yang mendasarinya.

Resolusi

Kesalahan SocketException menunjukkan bahwa VM yang meng-host aplikasi tidak dapat mengonversi nama <mynamespace>.servicebus.windows.net ke alamat IP yang sesuai.

Periksa untuk melihat apakah perintah berikut berhasil dalam pemetaan ke alamat IP.

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

Yang harus memberikan output seperti:

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

Jika nama di atas tidak diselesaikan ke IP dan alias namespace, tanyakan kepada administrator jaringan untuk menyelidiki lebih lanjut. Resolusi nama dilakukan melalui server DNS, biasanya sumber daya di jaringan pelanggan. Jika resolusi DNS dilakukan oleh Azure DNS, hubungi dukungan Azure.

Jika resolusi nama berfungsi seperti yang diharapkan, periksa apakah koneksi ke Azure Bus Layanan diizinkan di sini.

MessagingException

Penyebab

MessagingException adalah pengecualian umum yang mungkin dilemparkan karena berbagai alasan. Beberapa alasannya adalah:

  • Upaya dilakukan untuk membuat QueueClient pada suatu Topik atau Langganan.
  • Ukuran pesan yang dikirim lebih besar dari batas untuk tingkatan yang diberikan. Baca selengkapnya tentang kuota dan batasan Service Bus.
  • Permintaan plane data tertentu (kirim, terima, lengkapi, abaikan) dihentikan karena pembatasan.
  • Masalah sementara disebabkan karena peningkatan layanan dan mulai ulang.

Catatan

Daftar pengecualian di atas bukan merupakan daftar lengkap.

Resolusi

Langkah-langkah resolusi bergantung pada penyebab MessagingException ditampilkan.

  • Untuk masalah sementara (di mana isTransient diatur ke true) atau untuk masalah pembatasan, mencoba kembali operasi dapat mengatasinya. Kebijakan coba lagi default pada SDK dapat digunakan untuk ini.
  • Untuk masalah lain, detail dalam pengecualian menunjukkan masalah dan langkah-langkah penyelesaian dapat diuraikan dari yang sama.

StorageQuotaExceededException

Penyebab

StorageQuotaExceededException dibuat saat ukuran total entitas dalam namespace layanan premium melebihi batas 1 TB per unit Olahpesan.

Resolusi

  • Meningkatkan jumlah unit Olahpesan yang ditetapkan ke namespace layanan premium
  • Jika Anda sudah menggunakan unit olahpesan maksimum yang diizinkan untuk namespace layanan, buat namespace layanan terpisah.

Langkah berikutnya

Untuk referensi Service Bus .NET API lengkap, lihat referensi Azure .NET API. Untuk tips pemecahan masalah, lihat Panduan pemecahan masalah.