0

メッセージを受け取るオーケストレーションがあります。ターゲットの名前空間は「http://microsoft.com/HealthCare/HL7/2X」であり、ルート要素は「ORU_R01_23_GLO_DEF」です。

オーケストレーションでは、メッセージを構成形式の中間メッセージタイプにマップします。ターゲットの名前空間は「http://mycompany.com/myapplication」で、ルート要素は「MyMessage」です。次に、「MyMessage」メッセージがさらにマッピングされ、オーケストレーションの論理送信ポートを使用してWebサービスに送信されます。次に、WCF送信ポートがオーケストレーションにバインドされ、すべてが正常に機能します。すべてが期待どおりに機能します。

オーケストレーションを変更せずに、中間の「MyMessage」メッセージをサブスクライブしてファイルに書き込む送信ポートを作成したいと思います。これを行うために、BTS.MessageType= http: //mycompany.com/myapplication#MyMessageのフィルターを使用して送信ポートを作成しました。

メッセージがオーケストレーションを流れているのに、送信ポートがメッセージを取得していません。これは使用するのに不適切なフィルターですか?

4

2 に答える 2

3

'MyMessage'メッセージ、または物理WCF送信ポートにバインドされた論理送信ポートに送信されるのと同じメッセージをサブスクライブしようとしていますか?

あなたは次のように述べています:

次に、「MyMessage」メッセージがさらにマッピングされ、オーケストレーションの論理送信ポートを使用してWebサービスに送信されます。次に、WCF送信ポートがオーケストレーションにバインドされ、すべてが正常に機能します。

メッセージがMsgBoxに公開されていません

あなたが説明したことから、「MyMessage」メッセージのオーケストレーションに送信シェイプ/論理送信ポートの組み合わせがないことをお勧めします。そのため、送信ポートフィルターでこのメッセージタイプを手動でサブスクライブすることはできません。 。「失敗したルーティングレポート」メッセージについて言及していないという事実は、これが事実であることをさらに示唆しています。このメッセージタイプは、MsgBoxに公開されるメッセージのサブスクリプションが見つからない場合に生成されます。

メッセージの「MessageType」をキャプチャします

ただし、WCF送信ポートを介して送信しているメッセージのコピーをキャプチャする必要がある場合は、そのメッセージタイプを決定、メッセージをファイルに書き出す2番目の送信ポートサブスクリプションでそれを使用する必要があります。

使用するMessageTypeがわからない場合は、この情報を判別するための簡単なトリックがあります。

  1. WCF送信ポートを停止(登録解除ではない)
  2. 通常どおり、オーケストレーションを介してメッセージを送信します。メッセージは、WCF送信ポートのBizTalk管理コンソールで「SuspendedResumable」としてマークされます。
  3. BizTalk管理コンソールでメッセージを開き、その「メッセージコンテキスト」を表示します。メッセージコンテキストには、その'MessageType'プロパティが表示されます。これを使用して、使用するサブスクリプションフィルターを理解できます。
  4. WCF送信ポートを開始して、メッセージをフラッシュします。

または、オーケストレーションを変更したくない場合は、メッセージが(元の)WCF送信ポートの送信パイプラインを通過するときにメッセージをアーカイブしてみてください。独自のアーカイブコンポーネントを作成するか、既存の商用コンポーネントを使用してください。このようにアーカイブコンポーネントを使用することで、追加のサブスクリプションと関連する送信ポートのメンテナンスの費用を節約できます。

アップデート:

OPがオーケストレーションからメッセージボックスに中間メッセージを送信していないように聞こえます(コメントを参照)。メッセージサブスクリプションは、メッセージがメッセージボックスに公開された場合にのみ機能します。この場合、問題のメッセージ(「メッセージB」)は、オーケストレーションのコンテキストと存続期間内にのみ存在する中間メッセージです。OPは、メッセージを送信ポート経由でサブスクライブできるように、オーケストレーション内のダイレクトバウンドポートにメッセージを送信する必要があります。

于 2013-03-22T10:55:28.077 に答える
0

送信ポートのパイプラインを確認します。PassthrougthではなくXMLによる必要があります。

于 2015-06-18T14:01:10.647 に答える