Service Broker メッセージ型の作成
"メッセージ型" は、特定の種類のメッセージの名前と、その種類のメッセージで Service Broker が実行する検証を定義します。アプリケーションで使用するメッセージ型を決定するには、まず、アプリケーションで実行する必要があるタスクと、各タスクを実行するのに必要なデータを考えます。
最も一般的なアプローチは、タスクの 1 つのステップに必要な情報が各メッセージに含まれるように、メッセージを構造化することです。タスクの 1 つのステップに必要な情報が各メッセージに含まれていると、アプリケーションではメッセージの受信、ステップの完了、および応答の送信を 1 つのトランザクション内で簡単に行うことができます。そのため、多くのアプリケーションにとってメッセージ型やメッセージの内容を決定する最も容易な方法は、アプリケーションで実行されるタスクのトランザクションの境界を決定することです。個別のステップが 1 つのトランザクションなので、各トランザクションはサービス間で交換されるメッセージ型に対応します。また、状態情報、結果、および出力もメッセージ型です。
Service Broker の通信プロトコルは、このメッセージング方法で機能するようにデザインされています。ダイアログのプロトコルでは、大きなメッセージが転送用に断片化され、大きなメッセージによって小さなメッセージの転送が妨げられないことが保証されます。
検証の種類の選択
メッセージに指定する検証は、メッセージの内容によって異なります。一般に、テスト時には使用できる最も制限の厳しい検証を使用し、アプリケーションを配置するときは、テスト中よりも制限が緩やかな検証を使用してパフォーマンスを向上させます。たとえば、NONE の検証を指定するメッセージの本文として、型指定された XML ドキュメントを交換できます。この場合、XML の処理時にアプリケーションでメッセージが検証されます。
メッセージのネットワーク形式には、メッセージ型の名前が含まれます。そのため、多くの場合、照合順序の問題や名前付けの競合を回避するためにメッセージ型の名前が選択されます。名前付けの詳細については、「Service Broker オブジェクトの名前付け」を参照してください。
成功と失敗の提示
通常、アプリケーションでは、成功または失敗を示すために新しいメッセージ型を定義することはありません。代わりに、END CONVERSATION ステートメントを使用して、メッセージ交換が完了したこと、およびタスクが成功したことを示します。タスクが失敗した場合は、WITH ERROR オプションを含めてメッセージ交換に関するエラー メッセージを返します。
一般には、メッセージ交換の参加者のうち 1 つだけが、タスクの完了時にメッセージ交換を終了する必要があります。他の参加者は、End Dialog メッセージまたは Error メッセージに応答して END CONVERSATION を実行するだけです。通常、サービスに関するドキュメントでは、メッセージ交換が正常に完了した場合にそのメッセージ交換を終了する参加者が指定されます。このようなドキュメントが用意されていると、どの参加者もメッセージ交換を終了しなかったり、ある参加者がまだタスクを実行しているときに他の参加者がメッセージ交換を終了したりする問題を回避するのに役立ちます。Service Broker の内部メッセージは両方のエンドポイントに配信されるので、どちらのエンドポイントもエラー メッセージを処理できる必要があります。たとえば、ダイアログを閉じる前にダイアログの有効期間が切れた場合は、両方のエンドポイントが Service Broker エラー メッセージを受信します。
メッセージ交換は、いずれかの参加者がいつでもエラーで終了できます。Service Broker エラー メッセージの処理については、「Service Broker エラー メッセージの処理」を参照してください。