異なるサーバーでの2つのBizTalkオーケストレーション間の同期リクエスト応答
-
09-10-2019 - |
質問
Webサービスを公開するオーケストレーションがあり、受信したメッセージのソースを調べ、それに基づいていくつかの分岐ロジックを実行し、「サービス」オーケストレーションのセットの1つ(別のアプリケーションに存在)を呼び出します。これらのサービスオーケストレーションは、メッセージの更新を実行し、完了するとルーティングオーケストレーションに送信します。ルーティングアプリケーションは、適切なWebサービスの応答を送信します。つまり、エンドツーエンドプロセスはすべて同期することを意図しています。
私の意図は、「ルーティング」オーケストレーションに直接送信/受信ポートと「サービス」オーケストレーションにリンクされた受信ポートを使用してブロッキングを実現することでしたが、この作業を行うのに苦労しています。
私は相関とフィルター式を使用しようとしましたが、サービスオーケストレーションが応答を送信しようとすると、「複数のサブスクライバーエラー」が一貫して見られます。
他のオーケストレーション/ポートが私のスキーマを使用していないことを確認しました(確かにまったく新しいものを作成するまで)。
これを少し引き裂くと、達成するのは比較的簡単なもののようです。
(PS私はサービスオーケストレーションにWebサービスを公開し、それを呼び出すことに傾いていますが、常に同じマシンに存在するものにとっては長い道のりのように思えます)。
解決
この種の問題が発生しないように、メッセージがBizTalkによって「異なる」と見なされることを保証する一般的な方法は、前後に異なる値に設定されたコンテキストのみのプロパティを使用し、相関とフィルター式を使用することです。メッセージが一度に特定の場所から来るメッセージの特定のインスタンスのみと一致することを確認します。
そうすれば、メッセージタイプが同じであっても、サブスクリプションには実際には同じ述語がありません。