事件中樞傳訊例外狀況 - .NET (舊版)
本節列出 .NET Framework API 所產生的 .NET 例外狀況。
重要
本文所列的部分例外狀況只適用於舊版事件中樞 .NET 程式庫。 例如:Microsoft.ServiceBus.* 例外狀況。
如需新 .NET 程式庫所產生的 EventHubsException 相關資訊,請參閱 EventHubsException - .NET
在 2026 年 9 月 30 日,我們將淘汰不符合 Azure SDK 準則的 Azure 服務匯流排 SDK 程式庫 WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus 和 com.microsoft.azure.servicebus。 我們也將結束 SBMP 通訊協定的支援,因此您將無法在 2026 年 9 月 30 日之後再使用此通訊協定。 請在該日期之前移轉至最新的 Azure SDK 程式庫,該程式庫提供重要的安全性更新和改進的功能。
雖然較舊的程式庫仍可在 2026 年 9 月 30 日之後使用,但這些程式庫將無法繼續收到 Microsoft 的官方支援和更新。 如需詳細資訊,請參閱支援淘汰公告。
例外狀況類別
事件中樞 .NET API 會產生下列類別的例外狀況,以及可用來嘗試修正它們的相關動作:
使用者程式碼撰寫錯誤:
- System.ArgumentException
- System.InvalidOperationException
- System.OperationCanceledException
- System.Runtime.Serialization.SerializationException
一般動作:請先嘗試修正此程式碼,再繼續執行。
設定/組態錯誤:
- Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException
- Microsoft.Azure.EventHubs.MessagingEntityNotFoundException
- System.UnauthorizedAccessException
一般動作:檢閱您的組態並視需要進行變更。
暫時性例外狀況:
- Microsoft.ServiceBus.Messaging.MessagingException
- Microsoft.ServiceBus.Messaging.ServerBusyException
- Microsoft.Azure.EventHubs.ServerBusyException
- Microsoft.ServiceBus.Messaging.MessagingCommunicationException
一般動作:重試此操作或通知使用者。
其他例外狀況:
- System.Transactions.TransactionException
- System.TimeoutException
- Microsoft.ServiceBus.Messaging.MessageLockLostException
- Microsoft.ServiceBus.Messaging.SessionLockLostException
一般動作︰依例外狀況類型而異;請參閱下一節中的表格。
例外狀況類型
下表列出傳訊例外狀況類型及其原因,並指出您可以採取的建議動作。
例外狀況類型 | 描述/原因/範例 | 建議的動作 | 自動/立即重試的注意事項 |
---|---|---|---|
TimeoutException | 伺服器未在 OperationTimeout 控制的指定時間內回應要求的作業。 伺服器可能已完成要求的作業。 此例外狀況可能是由於網路或其他基礎結構延遲所導致。 | 檢查系統狀態的一致性,並視需要重試。 請參閱 TimeoutException。 |
在某些情況下,重試也許有幫助;將重試邏輯新增至程式碼。 |
InvalidOperationException | 不允許在伺服器或服務內執行要求的使用者作業。 如需詳細資訊,請參閱例外狀況訊息。 例如,如果是在 ReceiveAndDelete 模式收到訊息, Complete 將會產生這個例外狀況。 | 檢查程式碼和文件。 確定要求的作業無效。 | 重試沒有幫助。 |
OperationCanceledException | 嘗試在已關閉、中止或處置的物件上叫用作業。 極少數的情況下,環境交易是已處置狀態。 | 檢查程式碼,確定其不會在已處置物件上叫用作業。 | 重試沒有幫助。 |
UnauthorizedAccessException | TokenProvider 物件無法取得權杖、權杖無效,或權杖不包含執行作業所需的宣告。 | 確定權杖提供者是以正確的值建立。 檢查存取控制服務的組態。 | 在某些情況下,重試也許有幫助;將重試邏輯新增至程式碼。 |
ArgumentException ArgumentNullException ArgumentOutOfRangeException |
提供給方法的一個或多個引數無效。 提供給 NamespaceManager 或 Create 的 URI 包含路徑區段。 提供給 NamespaceManager 或 Create 的 URI 配置無效。 屬性值大於 32 KB。 | 檢查呼叫程式碼,並確定引數正確無誤。 | 重試將無助益。 |
Microsoft.ServiceBus.Messaging MessagingEntityNotFoundException Microsoft.Azure.EventHubs MessagingEntityNotFoundException |
與作業相關聯的實體不存在或已被刪除。 | 確定實體已存在。 | 重試將無助益。 |
MessagingCommunicationException | 用戶端無法建立事件中樞連線。 | 確定提供的主機名稱正確,且主機可以連線。 | 如果有間歇性的連線問題,重試也許有幫助。 |
Microsoft.ServiceBus.Messaging ServerBusyException Microsoft.Azure.EventHubs ServerBusyException |
服務目前無法處理要求。 | 用戶端可以等待一段時間,然後再重試作業。 請參閱 ServerBusyException。 |
用戶端可以在特定間隔後重試。 如果重試產生不同的例外狀況,請檢查該例外狀況的重試行為。 |
MessagingException | 可能會在下列情況中擲回的一般傳訊例外狀況:利用屬於不同實體類型 (例如主題) 的名稱或路徑嘗試建立 QueueClient 。 嘗試傳送大於 1 MB 的訊息。 處理要求時伺服器或服務發生錯誤。 如需詳細資訊,請參閱例外狀況訊息。 此例外狀況通常是暫時性例外狀況。 | 查看程式碼,並確定訊息內文只使用可序列化的物件 (或使用自訂序列化程式)。 查看文件來了解支援的屬性值類型,並且只使用支援的類型。 查看 IsTransient 屬性。 如果該屬性為 True,您就可以重試作業。 | 重試行為未定義,而且可能沒有幫助。 |
MessagingEntityAlreadyExistsException | 嘗試在該服務命名空間中以另一個實體已在使用的名稱建立實體。 | 刪除現有的實體,或選擇不同的名稱來建立實體。 | 重試將無助益。 |
QuotaExceededException | 傳訊實體已達到允許的大小上限。 如果在個別取用者群組層級開啟的接收者數目已達到上限 (5),便可能發生此例外狀況。 | 從實體或其子佇列接收訊息,在實體中建立空間。 請參閱 QuotaExceededException |
如果在此同時已移除訊息,重試可能會有幫助。 |
MessagingEntityDisabledException | 在停用的實體上要求執行階段作業。 | 啟用實體。 | 如實體在過渡期間被啟用,重試可能會有幫助。 |
Microsoft.ServiceBus.Messaging MessageSizeExceededException Microsoft.Azure.EventHubs MessageSizeExceededException |
訊息承載超過 1-MB 的限制。 這項 1-MB 的限制是以訊息總計為準,可包括系統屬性和任何 .NET 負荷。 | 減少訊息裝載大小,然後再重試作業。 | 重試將無助益。 |
QuotaExceededException
QuotaExceededException 指出已超過某特定實體的配額。
如果在個別取用者群組層級開啟的接收者數目已達到上限 (5),便可能發生此例外狀況。
事件中樞
每一個事件中樞都有 20 個用戶群組的限制。 當您嘗試建立更多時,您會收到 QuotaExceededException。
TimeoutException
TimeoutException 表示使用者啟始作業所用的時間長過作業逾時。
事件中樞的逾時是指定為連接字串的一部分,或透過 ServiceBusConnectionStringBuilder指定。 錯誤訊息本身可能不盡相同,但它一定會包含目前作業的指定逾時值。
在維護作業 (例如事件中樞服務更新 (或) 執行服務資源上的作業系統更新) 期間或過程中,預期會發生逾時狀況。 在作業系統更新期間,實體會四處移動且節點會更新或重新開機,這可能會導致逾時。 如需 Azure 事件中樞服務的服務等級協定 (SLA) 詳細資料,請參閱事件中樞的 SLA。
常見的原因
這個錯誤有兩個常見的原因︰設定不正確或暫時性服務錯誤。
- 設定不正確 :操作條件的作業逾時可能太小。 用戶端 SDK 的作業逾時預設值為 60 秒。 請檢查程式碼是否將值設定過小。 網路和 CPU 使用量的狀況會影響特定作業完成所花費的時間,所以作業逾時不應設定較小的值。
- 暫時性服務錯誤 :有時事件中樞服務在處理要求時會遇到延遲,例如,高流量的時段。 在這種情況下,您可以在延遲後重試作業,直到作業成功為止。 如果多次嘗試同一作業之後仍然失敗,請瀏覽 Azure 服務狀態網站,看看是否有任何已知的服務中斷。
ServerBusyException
Microsoft.ServiceBus.Messaging.ServerBusyException 或 Microsoft.Azure.EventHubs.ServerBusyException 表示伺服器已超載。 此例外狀況有兩個相關的錯誤碼。
錯誤碼 50002
此錯誤會因為兩個原因其中之一而發生:
負載未在事件中樞上的所有資料分割平均分佈,且其中一個資料分割達到本機輸送量單位限制。
解決方式︰修改資料分割散發策略,或嘗試 EventHubClient.Send(eventDataWithOutPartitionKey),可能會有幫助。
事件中樞命名空間沒有足夠的輸送量單位 (您可以檢查 Azure 入口網站中 [事件中樞命名空間] 視窗上的 [度量] 畫面來確認)。 入口網站會顯示彙總資訊 (1 分鐘),但我們會即時測量輸送量 – 因此這只是估計值。
解決方式︰增加命名空間的輸送量單位可能會有幫助。
您可以在 Azure 入口網站的 [事件中樞命名空間] 頁面的 [調整規模] 頁面或 [概觀] 頁面上設定輸送量單位。 或者,您可以使用「自動擴充」功能,自動增加輸送量單位數來擴大規模,進而符合使用量需求。
輸送量單位 (TU) 會套用到事件中樞命名空間中的所有事件中樞。 這表示您要在命名空間層級購買 TU,並在該命名空間下方的事件中樞間共用。 每個 TU 都會為命名空間賦予下列功能:
- 最高每秒 1 MB 的輸入事件 (傳送到事件中樞的事件),但不超過每秒 1000 個輸入事件、管理作業或控制 API 呼叫。
- 最高每秒 2MB 的輸出事件 (從事件中樞取用的事件),但是不超過 4096 個輸出事件。
- 最多 84 GB 的事件儲存體 (足以應付預設的 1 小時保留期限)。
在 [概觀] 頁面上的 [顯示計量] 區段中,切換至 [輸送量] 索引標籤。選取圖表,以在較大的視窗中開啟 (x 軸為 1 分鐘間隔)。 查看尖峰值並將這些值除以 60,以取得每秒的傳入位元組數或每秒的傳出位元組數。 在 [要求] 索引標籤上,使用類似的方法來計算尖峰時間的每秒要求數目。
如果您看到的值高於 TU * 限制 (每秒 1 MB 的輸入或每秒 1000 個要求輸入、每秒 2 MB 的輸出) 的數目,請使用事件中樞命名空間的 [規模調整] (左側功能表) 頁面來手動擴增規模或使用事件中樞的自動擴充功能,來增加 TU 數目。 手動調整或自動調整命名空間時,您最多可以擴增至 40 個 TU。
錯誤碼 50008
此錯誤應該很少會發生。 它會在執行您命名空間的程式碼之容器的 CPU 不足時發生 – 就在事件中樞負載平衡器開始之前幾秒鐘。
解決方式:限制對 GetRuntimeInformation 方法的呼叫。 Azure 事件中樞支援每個取用者群組每秒最多對 GetRuntimeInfo 發出 50 個呼叫。 一旦達到限制,您可能會收到類似下面的例外狀況:
ExceptionId: 00000000000-00000-0000-a48a-9c908fbe84f6-ServerBusyException: The request was terminated because the namespace 75248:aaa-default-eventhub-ns-prodb2b is being throttled. Error code : 50008. Please wait 10 seconds and try again.
下一步
您可以造訪下列連結以深入了解事件中樞︰