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 は、メッセージ交換の相手側にダイアログ タイマ メッセージを送信することはありません。
ダイアログ タイマ メッセージは、空のメッセージです。受信操作では、タイムアウト メッセージがキューに到着した順序には関係なく、そのダイアログに関する他のどのメッセージよりも前に、ダイアログ タイマ メッセージを受信します。