逆アセンブリ ステージ (回復可能なインターチェンジ処理)
インターチェンジは、逆アセンブリ ステージにおいて 2 つのモードで処理されます。
標準モード: 受信パイプラインの逆アセンブラー コンポーネントが構成されて標準の逆アセンブリが行われる場合、インターチェンジに含まれるメッセージの抽出、受信パイプラインによるメッセージの処理、メッセージのマップ、およびトランザクションの作業単位としてのメッセージの公開が行われます。 つまり、インターチェンジ全体と含まれるメッセージがすべて処理されて、メッセージ ボックス データベースに公開されます。または、保留キューにインターチェンジが配置されます。
回復可能なモード: 受信パイプラインの逆アセンブラー コンポーネントが 回復可能なインターチェンジ処理を実行するように構成されている場合、インターチェンジに含まれるメッセージは互いに独立して抽出されます。 抽出に成功したメッセージは、受信パイプラインの下に反映されます。 インターチェンジ内で確認されたメッセージの抽出に失敗した場合、そのメッセージは、保留キューに配置されます。
例
次の例は、インターチェンジ処理のシナリオを示しています。
例 1
この例では、標準のインターチェンジの受信場所で次の疑似インターチェンジが送信されます。 つまり、受信パイプラインの逆アセンブラー コンポーネントが構成されて、標準のインターチェンジ処理が行われます。
<Interchange>
<Document1>...</Document1>
<Document2 failure=”routing”>...</Document2>
<Document3>...</Document3>
<Document4 failure=”pipeline” recoverableError=”true”>...</Document4>
<Document5>...</Document5>
</Interchange>
このインターチェンジには、5 つのメッセージが含まれます。これらのメッセージは、逆アセンブラーによるインターチェンジからの抽出が成功したメッセージです。 これらのメッセージは、次のように処理されます。
1 番目から 3 番目までのメッセージは、パイプラインを通じて伝達され、公開用のメッセージとなります。
4 番目のメッセージは、パイプラインの逆アセンブリ ステージで処理に失敗します。 このため、ロールバックされているすべてのメッセージと元のインターチェンジ メッセージが再開可能な状態で保留されます。
送信結果は次のとおりです。
何も公開されません。 標準のインターチェンジ処理で、抽出されたメッセージのインターチェンジ処理中 (または処理後) に障害が発生した場合、すべての抽出されたメッセージが破棄され、元のインターチェンジは再開可能な状態で保留キューに配置されます。このため、元のインターチェンジが保留されます。
例 2
この例では、前の例と同じインターチェンジ処理と伝達シナリオを使用します。逆アセンブリ ステージを構成して回復可能なインターチェンジ処理が行われる点が異なります。
送信の結果、抽出された各メッセージがすべて処理され、元のインターチェンジが破棄されます。 各メッセージは、次のように処理されます。
1 番目から 3 番目までのメッセージは、パイプラインを通じて伝達され、公開用のメッセージとなります。
4 番目のメッセージは、逆アセンブリ処理に失敗し (抽出後に不具合が発生する)、保留用のメッセージとなります。
5 番目のメッセージは、パイプラインを通じて伝達され、公開用のメッセージとなります。
すべてのメッセージがインターチェンジから抽出されると、メッセージ 1、メッセージ 2、メッセージ 3、およびメッセージ 5 は、メッセージ ボックス データベースに公開され、メッセージ 4 は、保留キューに配置されます。 また、一致するサブスクライバーがないためにルーティング エラーが発生すると、メッセージ 2 が保留キューにリダイレクトされます。
回復可能なインターチェンジ処理の構成
回復可能なインターチェンジ処理は、受信パイプラインの逆アセンブラー コンポーネントのプロパティです。 すべての逆アセンブラー コンポーネントで回復可能なインターチェンジ処理を指定できるとは限りません。たとえば、ネイティブの BizTalk Framework 逆アセンブラーでは、このような処理を指定できません。 逆アセンブラーで回復可能なインターチェンジ処理がサポートされている場合は、設計されているパイプラインの逆アセンブリ ステージに逆アセンブラー コンポーネントを追加するときに、Visual Studio 内のパイプライン Designerでこの動作を指定します。 選択した逆アセンブラーをパイプラインの逆アセンブリ ステージにドラッグした後、その逆アセンブラー コンポーネントの回復可能なインターチェンジ処理プロパティを に true
設定します。
パーティの解決
回復可能なインターチェンジ処理での抽出に成功したメッセージは、親のインターチェンジが到着する受信ポートに対して構成されているパーティに応じて、送信するパーティを確認します。 特定のインターチェンジから抽出されたメッセージでパーティの解決が失敗した場合、パーティの解決は、インターチェンジ全体で失敗したと見なされます。
制限
インターチェンジが逆アセンブラーで失敗すると、インターチェンジは再開可能な状態で中断されます。 ただし、インターチェンジが管理の都合上再開されても、再度エラーが発生します。これは、逆アセンブリ エラーを引き起こす種類のエラーが、単にインターチェンジの内容 (インターチェンジが再開されても同じままになっている) による結果であるためです。 このような失敗したインターチェンジは変更して、受信場所を通じて再送信する必要があります。
サブスクライバーの不一致が原因で、インターチェンジからの抽出に成功したメッセージがメッセージの伝達に失敗した場合、メッセージが再開可能な状態で中断されます。 ルーティング エラーを解決すると、管理上の理由から、このメッセージを再開できます。
逆アセンブラー コンポーネントは、逆アセンブラー コンポーネントで次のエラーが発生しても、インターチェンジからのメッセージの抽出を続けます。
スキーマが見つからない。
スキーマのあいまいさが解決されない (同じメッセージの種類に複数のスキーマが存在する)。
XML 検証が失敗した。
フラット ファイル解析が失敗した。
逆アセンブラー コンポーネントで次のエラーが発生した場合、逆アセンブラー コンポーネントはインターチェンジからメッセージを引き続き抽出 しません 。
- ドキュメントのデータが整形式 XML ではなく、System.Xml.XmlReader が失敗するドキュメント プロパティである。
参照
XML 逆アセンブラー パイプライン コンポーネントを構成する方法
フラット ファイル逆アセンブラー パイプライン コンポーネントを構成する方法