1

最近、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 マッパーがスレッドを処理する方法に関するドキュメントは見つかりません。

4

2 に答える 2

1

ThreadStatic を使用して変数をカスタム受信パイプラインに設定し、BizTalk マップ内で (ヘルパー クラスを介して) その値にアクセスしました。これまでのところ問題はありません - 並行して最大 50 回の呼び出しでテストされています。

于 2012-05-14T13:56:10.413 に答える