2010-12-29 13 views
0

Ich habe eine merkwürdige Situation, die nur in dieser Orchestrierung, an der ich arbeite, aufkam.BizTalk-Nachrichten, die sich gegenseitig überschreiben?

Ich habe eine Nachricht empfangen kommen. Ich benutze eine Expression-Form und schreibe es in eine Variable "xmlDoc", damit ich überprüfen kann, was drin ist. Ich habe dann eine Nachrichtenzuweisungsform, wo ich eine XML-Zeichenfolge in eine Variable "xmlDoc2" lade und diese Variable einer zweiten Nachricht zuordne und schreibe sie aus, damit ich sie verifizieren kann. Ich habe dann eine andere Ausdrucksform und versuche, die erste Nachricht erneut zu schreiben, und sie wurde anscheinend durch die zweite Nachrichteninformation ersetzt.

Es ist nicht in einer parallelen Form, und die Nachrichtenzuweisung erstellt nur die zweite Nachricht. Zwischen dem Empfang und dem, wo ich dieses Problem sehe, mache ich einige Decide Shapes und baue andere Nachrichten aus der Receive-Nachricht. Sie alle funktionieren gut und überschreiben nichts (machen Sie die gleichen Prozesse wie das, was ich später versuche).

Wer hat das schon einmal gesehen oder etwas gesehen, das mir fehlt?

ETA: Der Prozess funktioniert ein bisschen wie folgt aus:

Send Message comes in 
xmlDoc = Send Message 
xmlDoc.OuterXml is written to a table 
xmlDoc2 = "<root><xml></xml></root>" 
Second Message = xmlDoc2 
xmlDoc2.OuterXml is written to a table 
xmlDoc = Send Message <-- What should happen 
xmlDoc = Second Message <-- What is happening 
+0

Mit "Nachrichten schreiben" gehe ich davon aus, dass Sie mit einer Sendeform "Nachricht senden" meinen. Wenn das der Fall ist, könnten Sie überprüfen, ob Sie tatsächlich die richtige Nachricht in jedem Fall senden. Nach Ihrer Beschreibung sollten Sie die erste Nachricht Nachricht senden mit Ihrer zweiten Nachricht senden und die zweite Nachricht senden, die Ihrer ursprünglichen Nachricht zugeordnet ist. Ist das der Fall? –

+0

Indem ich "schreibe", nehme ich die XML-Nachricht in die Nachricht und schreibe sie in eine Protokolltabelle, um zu überprüfen, ob sie das erstellt, was sie sollte, und die richtigen Informationen enthält. – Stephanie

Antwort

0

Ich konnte nicht Ihre genaue Problem reproduzieren, aber ich habe zu schließen. Ich denke, es gibt einige implizite Aussagen in Ihrem Prozessentwurf, die für uns wichtig sind, um zu verstehen, was wirklich passiert. In jedem Fall denke ich, dass Ihre BizTalk-Nachrichten nicht überschrieben werden, sondern dass die XmlDocument-Variablen sind.

Ich denke, Sie wurden möglicherweise von one of the fundamental confusions ein Entwickler aus einem Java oder VB6 Hintergrund Begegnungen getroffen, wenn Sie mit C# arbeiten.

C# ist eine verwaltete Sprache

Bitte denken Sie daran, dass C# eine verwaltete Sprache ist, dass es einen verwendet Garbage Collector nicht verwendeten Verweis auf Objekte zurückzufordern. Das Schlüsselwort hier ist Referenz.

Wenn Sie die folgenden Zeilen schreiben:

xmlDoc2 = "<root><xml/></root>"; 
SecondMessage = xmlDoc2; 

Grundsätzlich haben Sie zwei Verweise auf den gleichen Inhalt. Nämlich zwei Referenzen xmlDoc2 und SecondMessage die sich auf die zugewiesene Zeichenfolge beziehen.

Je nachdem, welchen Code Sie verwenden, um den XML-Inhalt Ihrer BizTalk-Nachrichten zu "schreiben", überschreiben Sie möglicherweise einige Referenzen.

Wenn dies im Kontext einer Construct-Form passiert, überschreiben Sie möglicherweise versehentlich den Inhalt der BizTalk-Nachricht selbst.

Eine Lösung?

Dieses Problem tritt normalerweise nicht auf, wenn Sie mit BizTalk arbeiten. Ich persönlich bin diesem Problem nie begegnet.

Wenn Sie Ihre ursprüngliche Frage mit dem genauen Code für beide Ausdrucksformen und die Zuweisungsform aktualisieren, aktualisiere ich diese Antwort mit geeigneterer Anleitung.

Verwandte Themen