Broker 訊息
應用程式間的大部份通訊,都是透過定義為訊息類型物件之應用程式特定的訊息來處理。此外,Service Broker 提供三種包含 Service Broker 之資訊 (而不是應用程式特定的資料) 的訊息類型。每個應用程式必須包含邏輯,才能處理「錯誤」訊息和「結束對話」訊息。如果應用程式在對話交談上設定交談計時器,則它必須包含邏輯才能處理「對話計時器」訊息。Service Broker 會將這些訊息類型提供給每個服務,不論它們是否出現在服務的合約中。
對話計時器訊息
對話計時器訊息會指示對話上的交談計時器已過期。這些訊息屬於 https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer 訊息類型。交談計時器為交談一方所特有的;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 訊息類型。
「結束對話」訊息為空訊息。接收作業會按訊息抵達佇列的順序接收「結束對話」訊息。
請參閱
工作
如何:從 Service Broker 錯誤訊息擷取資訊 (Transact SQL)