BizTalk マッパーと [ThreadStatic] 属性
-
11-09-2019 - |
質問
最近、BizTalk マッパーのマルチスレッドの性質と外部アセンブリの処理方法に関する問題に遭遇しました。
MSDN からのこの引用には次のことが示されています。
重要 スクリプト係数で使用するために外部アセンブリに記述されたコードは、糸を安全にする必要があります。これは、マップの複数のインスタンスがストレス条件下で実行時にこれらの.NETインスタンスを使用できるため、必要です。
マッパーは外部アセンブリのインスタンスを再利用します。
私のチームが使用していたユーティリティ アセンブリには次のコードがありました。
public class MapUtil
{
private string _storeReference;
public void SetStoreReference(string ref)
{
_storeReference = ref;
}
public string GetStoreReference()
{
return _storeReference;
}
}
これにより、1 つのファイルからのストア参照が別のファイルにマップされていました。
私はプライベートフィールドを次のように装飾することでこれを修正したように見えます [ThreadStatic]
[ThreadStatic]
private static string _storeReference;
私の質問は、BizTalk マッパーでこれに関する問題を知っている人はいますか?使用上の問題があることは承知しています [ThreadStatic]
たとえば、Asp.Net では、スレッドが再利用されているため、BizTalk マッパーがスレッドを処理する方法に関するドキュメントが見つかりません。
解決 2
「BizTalk マッパー内のスレッド動作は xyz であるため、メソッド abc を使用することに注意する必要があります」というような決定的な記述はまだ見つかっていませんし、そのような答えがどこからも得られるかどうかはわかりませんBizTalk 製品チームの外にいます。
製品チームと直接連絡をとっている私の同僚の 1 人がクリスマスの長期休暇中です (幸運なことに)。そのため、彼が戻ってくるまで、コードに加えられた変更により、スレッドの問題が一度も再発していないことに注意しておこうと思いました。大容量実稼働サーバー。
そうですね、それは完全に真実ではありません。私はヘルパー クラスの 1 つのプロパティから static キーワードを見逃しましたが、そのプロパティでは依然としてスレッドの問題が発生していました。それを証拠として取り上げます ThreadStatic
今のところ正しい方法です。
他のヒント
ThreadStatic を使用して変数をカスタム受信パイプラインに設定し、BizTalk マップ内で (ヘルパー クラスを通じて) その値にアクセスしました。これまでのところ問題はありません。最大 50 回の呼び出しを並行してテストしました。