Partager via


Références de message dans le code utilisateur

Lorsqu’un message est construit, une représentation du message se trouve dans la base de données MessageBox et une autre représentation est en mémoire sur l’ordinateur. Si vous effectuez l’attribution de message en passant une référence de message à un objet .NET ou à un assembly externe, puis l’objet .NET ou l’assembly externe modifie la représentation en mémoire sur l’ordinateur, le moteur d’orchestration BizTalk n’est pas conscient de la modification.

En outre, le moteur d’orchestration n’invalide pas la partie des données du message qui se trouvent dans la représentation dans la base de données MessageBox. Les données de partie de message ont les modes de représentation suivants :

  • Représentation de l'objet XmlDocument

  • Représentation d’objet

  • Représentation de flux

  • Représentation sous-jacente

    La façon dont les données de partie de message sont représentées en mémoire dépend de la construction du message et si le type est une classe .NET ou un schéma XSD (XML Schema Definition Language). Toutefois, la représentation UnderlyingPart est toujours un flux pointant vers la base de données MessageBox. Étant donné que les messages dans BizTalk Server sont immuables une fois que le message est validé dans la base de données MessageBox, le moteur d’orchestration utilise la représentation dans la base de données MessageBox pour référencer les données de partie de message.

Remarque

Un message construit peut déjà avoir une représentation dans la base de données MessageBox si vous affectez des parties à partir d’un message déjà validé.

Par exemple, le code suivant envoie les données de UnderlyingPart issues de la représentation dans la base de données MessageBox :

// In this example, assume m1 is committed to the MessageBox  
Construct m2 {   
               m2 = m1; // m2’s part data representation is the UnderlyingPart data of m1  
               m2(myContextProperty) = “123”; // m2’s part data representation is still the UnderlyingPart data of m1  
               A.test(m2.part); // orchestration engine does not invalidate the UnderlyingPart MessageBox representation  
             }  
Send(p.o, m2);  

Au lieu d’utiliser le code utilisateur précédent, vous pouvez utiliser du code similaire à ce qui suit pour renvoyer un document XmlDocument à une variable Message XLANG :

Void A.test(ref XmlDocument xd) {…}  
XmlDocument B.test(XmlDocument xd) {…}  
construct m2 {  
               m2 = m1;  
               m2(myContextProperty) = “123”; // m2’s part data representation is the UnderlyingPart data of m1  
               A.test(ref m2.part); // orchestration engine has enough information to know it has to invalidate the UnderlyingPart MessageBox representation  
               // or  
               m2.part = B.test(m2.part); // orchestration engine has enough information to know it has to invalidate the UnderlyingPart MessageBox representation  
             }