Question

J'ai récemment rencontré un problème avec la nature multi-thread du mappeur BizTalk et la façon dont il gère les ensembles externes.

Comme cette citation de MSDN indique:

  

Important Tout code écrit dans un   assemblage externe pour une utilisation dans un   les scripts functoid doit être fil   sûr. Cela est nécessaire car   plusieurs instances d'une carte peut utiliser   ces instances .NET au moment de l'exécution sous   conditions de stress.

Le Mapper réutilisera les instances d'ensembles externes.

Dans un ensemble de services publics mon équipe utilisait nous avions le code suivant:

public class MapUtil
{
    private string _storeReference;

    public void SetStoreReference(string ref)
    {
       _storeReference = ref;
    }

    public string GetStoreReference()
    {
        return _storeReference;
    }
}

Cela a été à l'origine storereferences d'un fichier à être mis en correspondance des fichiers différents.

I (semble) avoir résolu ce en décorant le domaine privé avec [ThreadStatic]

[ThreadStatic]
private static string _storeReference;

Ma question est - ce que quelqu'un sait de tout problème avec ce dans le mappeur BizTalk? Je suis conscient qu'il ya des problèmes en utilisant [ThreadStatic] dans Asp.Net pour examble, en raison de fils étant réutilisés, mais ne trouve aucune documentation sur la façon dont les traite mappeur BizTalk avec des fils.

Était-ce utile?

La solution 2

Je l'ai toujours pas trouvé une déclaration définitive sur les lignes de « Le comportement de filetage dans le mappeur BizTalk est xyz, vous devez donc prendre soin que vous utilisez la méthode abc » et je ne suis pas sûr qu'une telle réponse va venir de partout en dehors de l'équipe produit BizTalk.

Mon un collègue avec des contacts directs à l'équipe de produit est en congé de Noël prolongé (veinard) jusqu'à ce qu'il je retourne juste pensé que je note que la modification apportée à notre code nous n'avons pas vu une seule récurrence de la problèmes de filetage sur un serveur de production à haut volume.

Et bien - c'est pas tout à fait vrai, j'ai réussi à manquer le mot-clé statique d'une propriété sur ma classe d'aide et pour cette propriété nous avons vu encore les questions de filetage. Je prends cela comme une preuve de ThreadStatic être la bonne façon de faire pour l'instant.

Autres conseils

Je l'ai utilisé ThreadStatic pour définir une variable est personnalisée recevoir pipeline et accéder à sa valeur dans les BizTalk carte (par une classe d'aide). n'a pas eu de problème jusqu'à présent -. testé avec ~ 50 invocations en parallèle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top