匯出 (0) 列印
全部展開

附錄:訊息例外狀況

更新日期: 2014年4月

本節列出 Microsoft Azure 服務匯流排 訊息 API 所產生的各種例外狀況。此參考可能會有變更,因此請回來查看是否有更新。

訊息 API 會產生分屬下列類別的例外狀況,以及為嘗試進行修正所能採取的相關動作:

  1. 使用者代碼錯誤 (ArgumentExceptionInvalidOperationExceptionOperationCanceledExceptionSerializationException)。一般動作:請先嘗試修正此代碼,再繼續執行。

  2. 安裝/設定錯誤 (MessagingEntityNotFoundExceptionUnauthorizedAccessException)。一般動作:檢閱設定並視需要進行變更。

  3. 暫時性例外狀況 (MessagingExceptionServerBusyExceptionMessagingCommunicationException)。一般動作:重試操作或通知使用者。

  4. 其他例外狀況 (TransactionExceptionTimeoutExceptionMessageLockLostException/SessionLockLostException)。一般動作:您通常不會處理這些執行清理或中止的例外狀況。它們可能會用於追蹤。

下表列出訊息的例外狀況類型及其原因,以及可採取之建議動作的附註。

 

例外狀況類型 描述/原因/範例 建議動作 自動/立即重試的附註

TimeoutException

伺服器並未在 OperationTimeout 所控制的指定時間內回應要求的操作。伺服器可能已完成要求的操作。此狀況可能會在網路或其他基礎結構延遲時發生。

檢查系統狀態是否一致,然後視需要重試。

在某些情況下,重試可能會有用;請將重試邏輯新增至程式碼中。

InvalidOperationException

伺服器或服務內不允許所要求的使用者作業。如需詳細資訊,請參閱例外狀況訊息。例如,如果是在 ReceiveAndDelete 模式收到訊息,則 Complete 會產生此例外狀況。

檢查程式碼與文件。確定要求的操作有效。

重試沒有用。

OperationCanceledException

嘗試對已關閉、中止或處置的物件叫用操作。在少數情況下,已處置環境交易。

檢查程式碼,確定其未對已處置的物件叫用操作。

重試沒有用。

UnauthorizedAccessException

TokenProvider 物件無法取得權杖、權杖無效,或者權杖未包含執行操作所需的宣告。

確定已利用正確值建立權杖提供者。檢查 存取控制 服務的設定。

在某些情況下,重試可能會有用;請將重試邏輯新增至程式碼中。

ArgumentException

ArgumentNullException

ArgumentOutOfRangeException

檢查呼叫程式碼,確定引數正確無誤。

重試沒有用。

MessagingEntityNotFoundException

與操作相關聯的實體不存在或已遭刪除。

確定實體存在。

重試沒有用。

MessageNotFoundException

嘗試接收具有特定序號的訊息。找不到此訊息。

請確定尚未接收到訊息。檢查無效信件佇列,查看訊息是否已停止傳送。

重試沒有用。

MessagingCommunicationException

用戶端無法建立與 服務匯流排 的連線。

確定提供的主機名稱正確無誤而且可與主機聯繫。

如果連線有斷斷續續的問題,重試可能會有用。

ServerBusyException

服務目前無法處理要求。

用戶端可以等待一段時間,然後重試作業。

用戶端可在一定的時間間隔之後進行重試。如果重試之後產生不同的例外狀況,請檢查該例外狀況的重試行為。

MessageLockLostException

與訊息相關聯的鎖定權杖已到期,或者找不到鎖定權杖。

處置此訊息。

重試沒有用。

SessionLockLostException

與此工作階段相關聯的鎖定遺失。

中止 MessageSession 物件。

重試沒有用。

MessagingException

可能會在下列情況中擲回的一般訊息例外狀況:

  • 嘗試使用屬於不同實體類型 (例如,主題) 的名稱或路徑來建立 QueueClient

  • 嘗試傳送大於 256KB 的訊息。

  • 伺服器或服務在處理要求期間發生錯誤。如需詳細資訊,請參閱例外狀況訊息。此例外狀況通常是暫時性例外狀況。

  • 檢查程式碼,並確定只會針對訊息內文使用可序列化物件 (或使用自訂的序列化程式)。

  • 查看文件以取得支援的屬性值類型,並且只使用支援的類型。

  • 檢查 IsTransient 內容。如果它是 true,則您可以重試作業。

重試行為尚未定義,而且可能沒有用。

MessagingEntityAlreadyExistsException

嘗試建立一個實體,並使用該 服務命名空間 中其他實體已使用的名稱。

刪除現有實體或為建立的實體選擇另一個不同的名稱。

重試沒有用。

QuotaExceededException

訊息實體已達到允許的大小上限。

藉由接收來自實體或其子佇列的訊息,以在實體中建立空間。

如果訊息在此同時遭到刪除,則重試可能會有所幫助。

RuleActionException

如果您嘗試建立有效的規則動作,服務匯流排 會傳回此例外狀況。如果處理該訊息的規則動作時發生錯誤,服務匯流排 會將此例外狀況附加到無效訊息中。

檢查規則動作的正確性。

重試沒有用。

FilterException

如果您嘗試建立有效的篩選,服務匯流排 會傳回此例外狀況。如果處理該訊息的篩選時發生錯誤,服務匯流排 會將此例外狀況附加到無效訊息中。

檢查篩選的正確性。

重試沒有用。

SessionCannotBeLockedException

嘗試接受具有特定工作階段 ID 的工作階段,但工作階段目前由其他用戶端鎖定。

請確定其他用戶端已對工作階段解除鎖定。

如果工作階段在過渡期間被釋放,則重試可能會有所幫助。

TransactionSizeExceededException

太多作業為交易的一部分。

降低屬於交易的作業數目。

重試沒有用。

MessagingEntityDisabledException

停用之實體上的執行階段作業要求。

啟動實體。

如果實體在過渡期間啟動,則重試可能會有所幫助。

NoMatchingSubscriptionException

如果您將訊息傳送到已啟用預先篩選的主題,而無篩選符合時,服務匯流排 會傳回此例外狀況。

請確定至少有一個篩選符合。

重試沒有用。

MessageSizeExceededException

裝載的訊息超過 256K 的限制。請注意,256k 的限制是總訊息大小,其包括系統屬性以及所有的 .NET 負荷。

請減少訊息裝載的大小,然後重新嘗試作業。

重試沒有用。

TransactionException

環境交易 (Current) 無效。該交易可能已完成或中止。內部例外狀況可能會提供其他資訊。

重試沒有用。

TransactionInDoubtException

嘗試對不確定的交易進行操作,或者,嘗試認可交易而使交易變得不確定。

交易可能已經認可,因此應用程式必須處理此例外狀況 (當成特殊狀況)。

顯示:
© 2014 Microsoft