パイプライン
パイプラインは、パイプとフィルターの統合パターンを実装する Microsoft BizTalk Server のコンポーネントです。 ビジネス上の理由で、メッセージの送受信中にメッセージを変換して、BizTalk Server への入力または BizTalk Server からの送信に使用できるように準備を行う必要が生じることがあります。
一般的な例は、マップなどの BizTalk Server の特定の機能を利用するためにコンマ区切りフラット ファイルを XML ファイルに変換しなければならない場合などです。この変換は、フラット ファイル逆アセンブラー コンポーネントで行われます。 メッセージを送受信する前に統合シナリオで複数の種類のメッセージを変換しなければならない場合、パイプラインを使用してこの要件に対応します。 パイプラインを使用すると、開発者は、メッセージの送受信中に行う一連の変換を定義することができます。
パイプラインには、実行されるポートと対応して送信と受信の 2 種類があります。 送信パイプライン は送信ポートと要求/応答受信ポートの応答部分で実行され、 受信パイプラインは受信 場所と送信要求/応答送信ポートの応答部分で実行されます。 基本的に、受信パイプラインは、メッセージ ボックス データベースに公開されるメッセージの変換に使用されます。送信パイプラインは、サブスクライブされており BizTalk Server から送信されるメッセージに使用されます。
各パイプラインには、そのパイプラインの実行時に順に実行されるステージのセットが含まれています。 各ステージには、0 個以上のコンポーネントを含めることができます。 コンポーネントの最大数はステージによって異なります。
受信パイプラインのステージ
段階 | 目的 |
---|---|
デコード | メッセージ データを解読またはデコードします。 |
逆アセンブル | インターチェンジを小さいメッセージに逆アセンブルし、メッセージの内容を解析します。 |
検証 | メッセージ データを、通常、スキーマと照合して検証します。 |
パーティを解決する | メッセージまたはメッセージのコンテキストの一部のセキュリティ トークンに関連付けられた BizTalk Server パーティを確認します。 |
パイプライン ステージの送信
送信する
段階 | 目的 |
---|---|
プリアセンブル | メッセージをアセンブルする前に必要なメッセージ処理があれば実行します。 |
アセンブル | エンベロープの追加や XML のフラット ファイルへの変換、受信パイプラインの逆アセンブル ステージを補完するその他のタスクなどの手順を実行して、メッセージをアセンブルし、送信のための準備をします。 |
エンコード | メッセージを配信前に暗号化またはエンコードします。 |
パイプライン内のステージには、複数のコンポーネントがステージに追加された場合に実行されるコンポーネントを制御する、All または First Match のいずれかの 実行モード があります。 実行モードが [すべて] に設定されているステージでは、ステージ内に構成されている順序で各コンポーネントが呼び出されてメッセージ処理が行われます。 モードが [First Match] の場合、一致するコンポーネントが見つかるまで、正しいコンポーネントを検出するためのポーリングが各コンポーネントに対して行われ、一致するコンポーネントが見つかるとそのコンポーネントが実行されて、残りのコンポーネントは実行されません。
実行モードの例として、受信パイプラインの逆アセンブル ステージは [First Match] ステージなので、ステージの各コンポーネントが呼び出され、そのコンポーネントでメッセージを認識して処理できるかどうかが評価されます。 コンポーネントが肯定応答を返せば、そのステージの他のコンポーネントに対しては、メッセージを処理できるかどうかを検証するクエリは実行されません。 これに対し、受信パイプラインのデコード ステージの実行モードは [すべて] なので、メッセージを処理するために、このステージのそれぞれのコンポーネントが構成順に呼び出されます。 たとえば最初のデコーダーでメッセージを解読し、2 番目のデコーダーで圧縮形式からメッセージの圧縮解除を行うなどの処理が行われます。
パイプライン処理の実行モードに起因した問題の多くは、開発者が 1 つの受信パイプラインで複数の逆アセンブラーを使用した場合に生じます。 通常、逆アセンブル コンポーネントの違いはわずかで、たとえば、よく似た 2 つのフラット ファイル逆アセンブラーで、構成されているスキーマのみが異なるというケースがあります。 このような場合、メッセージが実際に一致するのは 2 番目の逆アセンブラーで定義されているスキーマであっても、最初の逆アセンブラーでメッセージを処理できるとプローブで判断されることがあります。 このときエラーが検出されメッセージが保留されるのは、メッセージを処理した後になってしまいます。 これに対処するには、もっと具体的なプローブ ロジックを持つ逆アセンブラーを新しく作成するか、パイプラインを 2 つ作成することによって異なるメッセージをそれぞれ別の受信場所でを受信する方法をとる必要があります。
パイプラインの展開
パイプラインを含むアセンブリをデプロイすると、管理データベースによってパイプラインが保存されます。 パイプラインは特定のバージョンのアセンブリに関連付けられており、結果は次のようになります。
同じパイプラインを使用する複数のアセンブリを展開すると、管理データベースは各アセンブリのパイプラインに 1 つのエントリを作成します。
パイプラインが含まれるアセンブリを削除すると、管理データベースはそのアセンブリに関連付けられたパイプラインを削除します。 管理データベースの関連付けられた各アセンブリにはパイプラインのコピーが存在するため、アセンブリを 1 つ削除しても他に影響はありません。