BizTalk mapeador e o atributo [ThreadStatic]
-
11-09-2019 - |
Pergunta
Eu encontrei recentemente um problema com a natureza multi-threaded do BizTalk Mapper e como ele lida com montagens externas.
Como esta citação do MSDN indica:
Importante Qualquer código escrito em um montagem externa para uso numa scripting necessidades functoid ser thread seguro. Isso é necessário porque várias instâncias de um mapa pode usar Nesses casos .NET em tempo de execução ao abrigo condições de estresse.
O mapeador de reutilizarão exemplos de conjuntos externos.
Em um utilitário de montagem de minha equipe estava usando tivemos o seguinte código:
public class MapUtil
{
private string _storeReference;
public void SetStoreReference(string ref)
{
_storeReference = ref;
}
public string GetStoreReference()
{
return _storeReference;
}
}
Este estava causando storereferences de um arquivo a ser mapeada para diferentes arquivos.
I (aparecer) ter corrigido este, decorando o campo privada com [ThreadStatic]
[ThreadStatic]
private static string _storeReference;
A minha pergunta é - alguém sabe de quaisquer problemas com isso no BizTalk Mapper? Estou ciente de que existem problemas usando [ThreadStatic]
em Asp.Net para examble, devido a tópicos a ser reutilizados, mas pode encontrar nenhuma documentação sobre a forma como o mapeador BizTalk lida com tópicos.
Solução 2
Eu ainda não encontrei uma declaração definitiva ao longo das linhas de 'O comportamento de segmentação dentro do BizTalk Mapper é xyz, então você deve tomar cuidado você usa método abc' e eu não tenho certeza de que tal resposta vai vir de qualquer lugar fora da equipe de produto BizTalk.
O meu um colega com contactos directos com a equipe de produto está de licença de Natal estendida (cão de sorte), de modo até que ele volte Eu apenas pensei que eu iria notar que, com a mudança feita para o nosso código não vimos uma única recorrência da enfiando problemas em um servidor de produção de alto volume.
Bem - que não é bem verdade, eu consegui perder a palavra-chave estática de uma propriedade na minha classe auxiliar e para que a propriedade ainda viu os problemas de segmentação. Vou tomar isso como prova de ThreadStatic
ser o caminho certo para ir para agora.
Outras dicas
Eu tenho usado ThreadStatic para definir uma variável é personalizado pipeline de recebimento e, em seguida, acessar o seu valor dentro de BizTalk Mapa (através de uma classe auxiliar). Não tenho qualquer problema até agora -. testado com ~ 50 invocações em paralelo