Broker システム メッセージ

Service Broker では、3 種類のシステム メッセージを使用して、Service Broker の状態およびエラーの情報を通知します。

システム メッセージの処理

Service Broker のメッセージ交換におけるメッセージの大半は、サービス間の通信に使用される、アプリケーション定義のメッセージです。各メッセージは、CREATE MESSAGE TYPE ステートメントで定義された、メッセージ型の形式に準拠する必要があります。メッセージ交換に使用できるメッセージ型のセットは、BEGIN DIALOG CONVERSATION ステートメントで指定されたコントラクトで定義されています。

メッセージ交換では、コントラクトに指定されたアプリケーション定義のメッセージ型以外に、3 種類のシステム定義のメッセージ型のうちの 1 つを使用するメッセージも受信できます。これらのメッセージ型は、Service Broker で使用され、エラーとダイアログの状態を報告します。すべてのアプリケーションは、エラー メッセージと終了ダイアログ メッセージを処理するロジックを格納している必要があります。アプリケーションでダイアログ メッセージ交換に対してメッセージ交換タイマを設定する場合、そのアプリケーションには、ダイアログ タイマ メッセージを処理するロジックが含まれている必要があります。Service Broker は、これらのメッセージ型を、サービスのコントラクトに表示されているかどうかにかかわらず、すべてのサービスに提供します。詳細については、「Service 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>

受信操作では、そのダイアログに関する、ダイアログ タイマ メッセージ以外のどのメッセージよりも前に、エラー メッセージを受信します。この場合、エラー メッセージがキューに到着した順序は関係ありません。キューにダイアログ タイマ メッセージとエラー メッセージの両方が入っていた場合、受信操作ではエラー メッセージよりも先にダイアログ タイマ メッセージを受信します。

ダイアログに関するエラー メッセージが到着すると、アプリケーションがそのダイアログでメッセージの送信を試行した場合にエラーが発生します。ただし、アプリケーションは、エラー メッセージを受信した後でも、そのダイアログに関する残りのメッセージを受信できます。

終了ダイアログ メッセージ

アプリケーションがエラーを指定せずにダイアログを終了すると、ローカル ブローカはリモート ブローカに終了ダイアログ メッセージを送信します。終了ダイアログ メッセージのメッセージ型は、https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog です。

終了ダイアログ メッセージは、空のメッセージです。受信操作では、終了ダイアログ メッセージを、メッセージがキューに到着した順序で受信します。

ダイアログ タイマ メッセージ

ダイアログ タイマ メッセージは、ダイアログのメッセージ交換タイマの有効期限が切れたことを示します。これらのメッセージのメッセージ型は、https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer です。メッセージ交換タイマは、メッセージ交換の一方の側に固有です。Service Broker は、メッセージ交換の相手側にダイアログ タイマ メッセージを送信することはありません。

ダイアログ タイマ メッセージは、空のメッセージです。受信操作では、タイムアウト メッセージがキューに到着した順序には関係なく、そのダイアログに関する他のどのメッセージよりも前に、ダイアログ タイマ メッセージを受信します。