Condividi tramite


Riferimenti ai messaggi nel codice utente

Quando viene costruito un messaggio, una rappresentazione del messaggio si trova nel database MessageBox e un'altra rappresentazione è in memoria nel computer. Se si effettua l'assegnazione del messaggio passando un riferimento di messaggio a un oggetto .NET o a un assembly esterno e quindi l'oggetto .NET o l'assembly esterno modifica la rappresentazione in memoria nel computer, il motore di orchestrazione BizTalk non riconosce la modifica.

Inoltre, il motore di orchestrazione non invalida i dati della parte del messaggio presenti nella rappresentazione nel database MessageBox. I dati della parte del messaggio hanno le modalità di rappresentazione seguenti:

  • Rappresentazione XmlDocument

  • Rappresentazione dell'oggetto

  • Rappresentazione del flusso

  • Rappresentazione Parte Sottostante

    La modalità di rappresentazione dei dati della parte del messaggio in memoria dipende dalla costruzione del messaggio e dal fatto che il tipo sia una classe .NET o uno schema XSD (XML Schema Definition Language). Tuttavia, la rappresentazione UnderlyingPart è sempre un flusso che punta al database MessageBox. Poiché i messaggi in BizTalk Server non sono modificabili dopo il commit del messaggio nel database MessageBox, il motore di orchestrazione usa la rappresentazione nel database MessageBox per fare riferimento ai dati della parte del messaggio.

Annotazioni

Un messaggio costruito potrebbe avere già una rappresentazione nel database MessageBox se si assegnano parti di un messaggio già di cui è già stato eseguito il commit.

Ad esempio, il codice seguente invia i dati UnderlyingPart dalla rappresentazione nel database 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);  

Anziché usare il codice utente precedente, è possibile usare codice simile al seguente per restituire un documento XmlDocument a una variabile XLANG message:

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  
             }