共用方式為


Broker 系統訊息

Service Broker 使用三種系統訊息類型,與來自 Service Broker 的狀態和錯誤資訊通訊。

處理系統訊息

Service Broker 交談中的多數訊息都是應用程式定義的訊息,在服務間進行通訊時使用。每個訊息都必須符合 CREATE MESSAGE TYPE 陳述式鎖定的訊息類型格式。交談所允許的訊息類型集合是由 BEGIN DIALOG CONVERSATION 陳述式中指定的合約所定義。

除了合約中指定之應用程式定義的訊息類型之外,任何交談也可以接收使用三個系統定義之訊息類型之一的訊息。Service Broker 會使用這些訊息類型來報告對話的錯誤和狀態。每個應用程式必須包含邏輯,才能處理「錯誤」訊息和「結束對話」訊息。如果應用程式在對話交談上設定交談計時器,應用程式必須包含處理對話計時器訊息的邏輯。不論這些訊息類型是否會出現在服務的合約中,Service Broker 都會提供這些訊息類型給每個服務。如需詳細資訊,請參閱<處理 Service Broker 錯誤訊息>。

錯誤訊息

當遠端服務因為錯誤而結束對話,或本機 Broker 在對話中偵測到無法復原的錯誤時,本機 Broker 會建立「錯誤訊息」。錯誤訊息是 https://schemas.microsoft.com/SQL/ServiceBroker/Error 訊息類型。錯誤訊息做為格式正確的 XML 進行驗證。

包含在錯誤訊息中的 XML 文件使用 https://schemas.microsoft.com/SQL/ServiceBroker 命名空間。文件的根元素有 Error 本機名稱,並且包含名為 Code 的元素與名為 Message 的元素。Code 元素包含整數值。Message 元素包含訊息之人們可讀取的文字。

例如,由處理費用報表之服務產生的錯誤訊息可能包含下列 XML (針對可讀性重新格式化):

<?xml version="1.0"?>
<Error xmlns="https://schemas.microsoft.com/SQL/ServiceBroker">
  <Code>12</Code>
  <Description>
    Unknown cost center "127-1000". Please check the cost center list
    and resubmit the report.
  </Description>
</Error>

接收作業會在接收對話計時器訊息之外的任何對話訊息之前,接收錯誤訊息。不管錯誤訊息出現在佇列上的順序為何,都會發生這個狀況。當佇列同時具有對話計時器訊息和錯誤訊息時,接收作業會在接收錯誤訊息之前接收對話計時器訊息。

出現對話的錯誤訊息時,如果應用程式嘗試傳送該對話上的訊息,Broker 便會引發錯誤。但是,即便是在接收錯誤訊息之後,應用程式還是可以接收此對話的其餘任何訊息。

結束對話訊息

當應用程式在未指定錯誤的情況下結束對話時,本機 Broker 會將「結束對話」訊息傳送給遠端 Broker。「結束對話」訊息是 https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog 訊息類型。

「結束對話」訊息為空訊息。接收作業會按訊息抵達佇列的順序接收「結束對話」訊息。

對話計時器訊息

對話計時器訊息會指示對話上的交談計時器已過期。這些訊息屬於 https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer 訊息類型。交談計時器專屬於交談的一方;Service Broker 絕不會將對話計時器訊息傳送給交談的另一方。

對話計時器訊息為空訊息。不論逾時訊息出現在佇列上的順序如何,接收作業都會在接收該對話的其他任何訊息之前接收對話計時器訊息。