次の方法で共有


呼び出されたオーケストレーションで受信サブスクリプションを作成する方法

オーケストレーションを開始するときに、オーケストレーション の開始 図形を介してパラメーターとしてメッセージを渡すことができますが、一部のシナリオでは、呼び出し元オーケストレーションから呼び出し後に呼び出されたオーケストレーションにメッセージを送信できます。 たとえば、呼び出し時に渡すメッセージがわからない場合や、呼び出されたオーケストレーションにメッセージを動的に送信するために他のオーケストレーションが必要な場合があります。

呼び出されたオーケストレーションにメッセージを送信する方法は、呼び出されたオーケストレーションが、関連付けによって定義され、そのサブスクリプションを使用してメッセージを受信するのに役立つサブスクリプションを作成できるように、相関関係を渡すことです。 ただし、単に相関関係を渡すことができず、呼び出されたオーケストレーションが関連付けに基づいてサブスクリプションを作成し、サブスクリプションでメッセージを受信することを期待することはできません。 この方法を使用すると、呼び出し元オーケストレーションから呼び出されたオーケストレーションに送信したメッセージは、"サブスクライバーが見つからなかったため、発行されたメッセージをルーティングできませんでした" というエラーが発生します。これは、次の原因です。

  • 呼び出されたオーケストレーションに競合状態があります。

  • 呼び出されたオーケストレーションがメッセージを受信できるように、ルーティングのためにサブスクリプションを MessageBox データベースに送信するコミット ポイントはありません。

    この問題を解決する方法は、次の手順を実行することです。

  1. 呼び出し元オーケストレーションでは、メッセージの受信を有効にするための「アクティブな受信」があります。 呼び出し元オーケストレーションでメッセージを受信した後、関連付けセットを初期化し、オーケストレーション の開始 図形を介して関連付けセットと自己相関受信ダイレクト バインド ポートを渡します。 渡すポートは呼び出されたオーケストレーションの送信ポートになり、呼び出し元オーケストレーションと同期するためにメッセージを送信するために使用します。

  2. 呼び出されたオーケストレーションで、自己相関ポートを介して呼び出し元オーケストレーションにメッセージを返送します。 これにより、呼び出し元オーケストレーションと同期され、競合状態を防ぎ、呼び出されたオーケストレーションでルーティングするためのメッセージ ボックスへの受信サブスクリプションを作成するときにコミット ポイントを提供します。

  3. 呼び出し元オーケストレーションは、自己相関ポートを介してメッセージを受信し、呼び出されたオーケストレーションと同期します。 自己相関ポート受信には相関フォロワーは必要ありません。 呼び出し元オーケストレーションから呼び出されたオーケストレーションにメッセージを安全に送信できるようになりました。呼び出されたオーケストレーションは、関連付けに基づいてメッセージを受信します。

    上記のアプローチは目標を達成できますが、より良いアプローチは、受信する相関関係を初期化するメッセージを渡すことです。 自己相関ポートを介して呼び出されたオーケストレーションと呼び出し元オーケストレーションを同期する場合は、関連付けの初期化に必要なメッセージを常に渡すようにお勧めします。 次の手順では、最も信頼性が高く、最高のパフォーマンスのアプローチを提供します。

  4. 呼び出し元オーケストレーションでは、メッセージを受信するための有効化された受信があります。 メッセージを受信したら、 オーケストレーションの開始 図形を介してメッセージと自己相関受信ダイレクト バインド ポートを渡します。 渡すメッセージは、呼び出されたオーケストレーションの相関関係を初期化するために使用されます。 渡すポートは呼び出されたオーケストレーションの送信ポートになり、呼び出し元オーケストレーションと同期するためにメッセージを送信するために使用します。

  5. 呼び出されたオーケストレーションで、関連付けを初期化し、メッセージを呼び出し元オーケストレーションに送信します。 これにより、呼び出し元オーケストレーションと同期され、競合状態を防ぎ、呼び出されたオーケストレーションでルーティングするためのメッセージ ボックスへの受信サブスクリプションを作成するときにコミット ポイントを提供します。

  6. 呼び出し元オーケストレーションは、自己相関ポートを介してメッセージを受信し、呼び出されたオーケストレーションと同期します。 自己相関ポート受信には相関フォロワーは必要ありません。 呼び出し元オーケストレーションから呼び出されたオーケストレーションにメッセージを安全に送信できるようになりました。呼び出されたオーケストレーションは、関連付けに基づいてメッセージを受信します。

こちらもご覧ください

オーケストレーションでの相関関係の使用
ダイレクト バインド ポート Self-Correlating 使用する方法