BizTalk映射器和[ThreadStatic]属性

时间:2009-12-03 00:02:43

标签: thread-safety biztalk biztalk-mapper threadstatic

我最近遇到了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中有任何问题?我知道在Asp.Net中使用[ThreadStatic]存在问题,因为线程被重用,但是找不到BizTalk映射器处理线程的方式的文档。

2 个答案:

答案 0 :(得分:1)

我使用ThreadStatic设置变量是自定义接收管道,然后在BizTalk Map中访问其值(通过帮助程序类)。到目前为止没有任何问题 - 并行测试约50次。

答案 1 :(得分:0)

我还没有找到一个明确的陈述,即“BizTalk Mapper中的线程行为是xyz,所以你应该注意使用abc方法”,我不确定这样的答案是否会来自BizTalk产品团队以外的任何地方。

我的一位与产品团队有直接联系的同事正在延长圣诞节假期(幸运狗),所以在他回来之前我只是想我注意到随着对我们的代码所做的更改我们没有看到一次重复大批量生产服务器上的线程问题。

嗯 - 这不太正确,我设法错过了我的帮助类中的一个属性的static关键字,对于该属性,我们仍然看到了线程问题。我会把它作为ThreadStatic现在正确的方法的证据。