5

ダイレクトバウンド論理ポートを備えたオーケストレーションがあります。これを「O1」と呼びましょう。O1はメッセージタイプ「A」(受信ポートのフィルタプロパティで指定)にサブスクライブします。

O1は、タイプ「A」のメッセージを受信すると、ユーザーの入力を待ってから完了します。(ここでいくつかの相関関係があります)

ここまでは順調ですね...

タイプ「A」のメッセージを作成してメッセージボックスにプッシュする2番目のオーケストレーション「O2」があります。

これが発生すると、O1の多くのインスタンスが起動します。私が考えることができるのは、O1のインスタンスが存在する限り、メッセージはサブスクライバーが消費できるようにメッセージボックスで引き続き利用できるということです。そのため、オーケストレーションのインスタンスが絶えず作成されます。

メッセージがオーケストレーションによって処理されているとき、メッセージは完了するまでメッセージボックスに残りますか?

誰かが何が起こっているのか、そして私が何が欠けているのかを説明できるのは非常にありがたいことです!

4

1 に答える 1

6

メッセージがオーケストレーションによって処理されているとき、メッセージは完了するまでメッセージボックスに残りますか?

いいえ。実際にはメッセージはメッセージボックスにありますが、アクティブとしてマークされています。したがって、他のプロセスはそれを使用しません。たぶん、O1はタイプAのメッセージを作成しているので、それ自体を再アクティブ化します。

このヒントとコツの記事を見てください:

さて、楽しい部分です。ダイレクトバウンドポート、特にメッセージボックスの種類に共通する落とし穴は、無限ループを作成することです。Activate = Trueの受信シェイプ(もちろん直接バインド)と、メッセージをFILEポートに転送するだけの送信シェイプの2つのシェイプのみで構成される単純なオーケストレーションを想像してみてください。このオーケストレーションがメッセージを送信するとき、それはどこに行きますか?いつものように、最初にメッセージボックスに。メッセージボックスにメッセージが到着するたびに、BizTalkは一致するサブスクリプションを検索します。そして、このメッセージは、最初にオーケストレーションをアクティブにしたメッセージとどのように異なりますか?そうではないので、BizTalkは、メモリがなくなるまで、オーケストレーションの別のインスタンスを起動して処理します。

于 2011-04-09T17:56:17.230 に答える