Freigeben über


Nachrichtenreferenzen im Benutzercode

Wenn eine Nachricht erstellt wird, befindet sich eine Darstellung der Nachricht in der MessageBox-Datenbank, und eine andere Darstellung befindet sich im Arbeitsspeicher auf dem Computer. Wenn Sie die Nachrichtenzuweisung vornehmen, indem Sie einen Nachrichtenverweis an ein .NET-Objekt oder eine externe Assembly übergeben und das .NET-Objekt oder die externe Assembly dann die Darstellung im Arbeitsspeicher auf dem Computer ändern, ist der BizTalk Orchestration Engine die Änderung nicht bekannt.

Darüber hinaus macht die Orchestrierungs-Engine die Nachrichtenteildaten, die in der Darstellung innerhalb der MessageBox-Datenbank gespeichert sind, nicht ungültig. Nachrichtenteildaten weisen die folgenden Darstellungsmodi auf:

  • XmlDocument-Darstellung

  • Objektdarstellung

  • Streamdarstellung

  • UnderlyingPart-Darstellung

    Wie die Nachrichtenteildaten im Arbeitsspeicher dargestellt werden, hängt von der Nachrichtenkonstruktion ab und davon, ob der Typ eine .NET-Klasse oder ein XSD-Schema (XML Schema Definition Language) ist. Die UnderlyingPart-Darstellung ist jedoch immer ein Datenstrom, der auf die MessageBox-Datenbank verweist. Da Nachrichten in BizTalk Server nach dem Commit der Nachricht an die MessageBox-Datenbank unveränderlich sind, verwendet das Orchestrierungsmodul die Darstellung in der MessageBox-Datenbank, um auf Nachrichtenteildaten zu verweisen.

Hinweis

Eine erstellte Nachricht könnte möglicherweise bereits in der MessageBox-Datenbank repräsentiert sein, wenn Sie Teile aus einer Nachricht zuweisen, die bereits festgeschrieben ist.

Der folgende Code sendet beispielsweise die UnderlyingPart-Daten aus der Darstellung in der MessageBox-Datenbank:

// 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);  

Anstatt den vorherigen Benutzercode zu verwenden, können Sie Code verwenden, der dem folgenden ähnelt, um ein XmlDocument-Dokument an eine Message XLANG-Variable zurückzugeben:

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  
             }