0

サードパーティのDLLに問題があります。これはスレッドセーフではありませんが、オーケストレーション内で呼び出す必要があります。

式の図形内でDLL呼び出しを行っています。同じDLLがいくつかの異なるオーケストレーションで呼び出されます。

私が抱えている問題は、一連の着信メッセージに対して、BizTalkが複数のオーケストレーション(またはオーケストレーションの複数のインスタンス)を並行して実行することです。これにより、DLL内で例外が発生します。

DLLのリファクタリングがオプションではないことを考えると、これを回避する方法はありますか?または、一度に1つのオーケストレーションのみを実行するようにBizTalkを調整する方法はありますか。(作業プールをプロセッサの数に制限するハックをいくつか見ましたが、これは役に立たないようです。シングルコアマシンにダウングレードすることはできません!)

BizTalkを調整するよりも、DLLを満足させる方法を見つけたいと思います(方法はわかりませんが)。ただし、サードパーティと話し合っているときに、それを調整する方法があれば、短期的には許容できる解決策になります。(大規模な組織であり、本当によく知っている必要があります!)

4

1 に答える 1

1

シングルコアマシンでも、BizTalkは同時オーケストレーションを実行します。

オーケストレーションにシングルトンパターンを実装することで、オーケストレーションを調整できます。

これを行うには、オーケストレーションでループを作成し、2つの受信シェイプを作成します。1つはループの開始前、もう1つはループ内です。

これらの受信は両方とも、同じインバウンド論理ポートにバインドされます。

BTS.MessageTypeのようなものを指定する相関セットを作成し、最初の受信シェイプを設定して相関を開始し、2番目の受信を設定して相関を追跡します。

ループが終了しない限り、特定のタイプのメッセージが常にオーケストレーションの同じインスタンスによって処理されることを保証できます。

ただし、シングルトンの使用は設計上の決定であり、欠点があります。たとえば、スループットが低下し、シングルトンがサスペンドできないことを確認する必要があります。そうしないと、後続のすべてのメッセージのブロックが作成されます。

お役に立てれば。

于 2011-08-18T12:04:08.423 に答える