Freigeben über


Nachrichtenverweise in Benutzercode

Wenn eine Nachricht erstellt wird, befindet sich eine Darstellung dieser Nachricht in der MessageBox-Datenbank und eine weitere im Arbeitsspeicher des Computers. Wenn Sie die Nachrichtenzuweisung durchführen, indem Sie einen Nachrichtenverweis an ein .NET-Objekt oder eine externe Assembly übergeben, und die Darstellung im Arbeitsspeicher des Computers von diesem .NET-Objekt bzw. der externen Assembly geändert wird, stehen der BizTalk-Orchestrierungs-Engine keine Informationen über diese Änderung zur Verfügung.

Zudem werden die Nachrichtenteildaten der Darstellung in der MessageBox-Datenbank von der Orchestrierungs-Engine nicht für ungültig erklärt. Nachrichtenteildaten verfügen über folgende Darstellungsmodi:

  • XmlDocument-Darstellung

  • Objekt-Darstellung

  • Stream-Darstellung

  • UnderlyingPart-Darstellung

    Die Darstellung von Nachrichtenteildaten im Arbeitsspeicher ist von der Nachrichtenerstellung und vom Typ abhängig, bei dem es sich um eine .NET-Klasse oder ein XSD-Schema handelt. Die UnderlyingPart-Darstellung ist jedoch immer ein Stream in Richtung der MessageBox-Datenbank. Da Nachrichten nach der Übergabe an die MessageBox-Datenbank im BizTalk Server unveränderlich sind, wird die Darstellung in der MessageBox-Datenbank von der Orchestrierungs-Engine als Verweis auf Nachrichtenteildaten verwendet.

Hinweis

Wenn Sie Teile einer bereits übergebenen Nachricht zuweisen, ist möglicherweise bereits eine Darstellung der erstellten Nachricht in der MessageBox-Datenbank vorhanden.

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

Anstelle des oben beschriebenen Benutzercodes können Sie auch Code ähnlich dem folgenden verwenden, um ein XmlDocument-Dokument an eine XLANG-Variable einer Nachricht 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  
             }