0

私のシナリオでは、クライアントが MLLP 経由で HL7 を BizTalk 双方向受信ポートに送信します。BizTalk は、外部サービスに対して Web サービス呼び出しを行い、応答を受信し、それを HL7 ACK に変換してクライアントに返します。これらはすべて同期トランザクションで行われます。

これを実現するために、メッセージ ボックスに直接バインドされたオーケストレーションがあり、BTAHL7 パーティ構成は、要求応答受信ポートで送信パイプラインに ACK をルーティングしないように設定されています。基本的に、デフォルトの ACK 生成をオフにして、オーケストレーションからカスタム ACK を生成しています。また、受信したメッセージがスキーマと一致しない場合に、オーケストレーションが不良メッセージを受信しないように、オーケストレーション受信形状 BTAHL7Schemas.ParseError == false にフィルターを追加しました。

すべてがうまく機能します。私のテストでは、意図的に悪い HL7 メッセージを送信しています。この場合、サブスクライバーが見つからないため、保留中のルーティング エラー レポートが表示されます。

この動作の理由は非常に明確です。解析エラーのあるメッセージを購読していないからです。解析エラーが発生した場合、エラー ACK がクライアントに返されるようにします。オーケストレーションが解析エラーのあるメッセージをサブスクライブできるようにして、エラー ACK を作成することはできますが、ACK で実際の解析エラーを返す方法がありません。

通常、非同期アーキテクチャでは、「要求応答受信ポートでパイプラインを送信するためのルート ACK」をオンにして、BTAHL72X 受信/送信パイプラインに処理させます。その後、クライアントはエラーの詳細を含むエラー ACK を取得します。

私の質問は、受信パイプラインの元の ACK を取得して、オーケストレーションから返す方法はありますか?

4

1 に答える 1