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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top