Недавно я столкнулся с проблемой многопоточной природы BizTalk Mapper и того, как он обрабатывает внешние сборки.
Как указывает эта цитата из MSDN:
Важно Любой код, написанный на
внешняя сборка для использования в
скриптовый функтоид должен быть потоком
безопасный. Это необходимо, потому что
несколько экземпляров карты могут использовать
эти экземпляры .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 работает с потоками.