1

我最近遇到了 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 映射器处理线程的方式的文档。

4

2 回答 2

1

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

于 2012-05-14T13:56:10.413 回答
0

我仍然没有找到一个明确的声明“BizTalk Mapper 中的线程行为是 xyz,所以你应该小心使用方法 abc”,我不确定这样的答案是否会来自任何地方在 BizTalk 产品团队之外。

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

嗯 - 这不是真的,我设法从我的助手类的一个属性中错过了 static 关键字,对于那个属性,我们仍然看到线程问题。我将把它作为ThreadStatic目前正确方法的证据。

于 2009-12-22T23:02:55.380 回答