最近、BizTalk マッパーのマルチスレッドの性質と、外部アセンブリの処理方法に関する問題に遭遇しました。
MSDN からのこの引用が示すように:
スクリプトFunctoid で使用するために外部アセンブリで記述されたコードは、スレッド セーフである必要があります。これが必要なのは、マップの複数のインスタンスがストレス条件下で実行時にこれらの .NET インスタンスを使用できるためです。
Mapper は、外部アセンブリのインスタンスを再利用します。
私のチームが使用していたユーティリティ アセンブリには、次のコードがありました。
public class MapUtil
{
private string _storeReference;
public void SetStoreReference(string ref)
{
_storeReference = ref;
}
public string GetStoreReference()
{
return _storeReference;
}
}
これにより、あるファイルのストア参照が別のファイルにマップされていました。
プライベートフィールドを装飾することでこれを修正したようです[ThreadStatic]
[ThreadStatic]
private static string _storeReference;
私の質問は、BizTalk マッパーでこれに関する問題を知っている人はいますか? [ThreadStatic]
スレッドが再利用されているため、Asp.Net での使用に問題があることは認識していますが、BizTalk マッパーがスレッドを処理する方法に関するドキュメントは見つかりません。