我最近遇到了 BizTalk Mapper 的多线程特性以及它如何处理外部程序集的问题。
正如 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 Mapper 中的任何问题吗?我知道[ThreadStatic]
由于线程被重用,例如在 Asp.Net 中使用存在问题,但找不到有关 BizTalk 映射器处理线程的方式的文档。