2010-12-29 11 views
0

私は、私が取り組んでいるこの1つのオーケストレーションにしか登場していない奇妙な状況があります。BizTalkメッセージが互いに上書きされますか?

私は受信メッセージを受け取りました。私はExpressionシェイプを使用し、変数 "xmlDoc"に書き込むので、何が入っているかを確認できます。私は次に、XMLの文字列を変数 "xmlDoc2"にロードし、その変数を2番目のメッセージに割り当てて、それを検証できるように書き出すメッセージ割り当てシェイプを作成します。私は別の表現の形をして、最初のメッセージをもう一度書き出しようとします。それは明らかに2番目のメッセージ情報に置き換えられています。

これは並列形ではなく、メッセージ割り当ては2番目のメッセージを作成するだけです。受信と私がこの問題を見ている場所との間で、いくつかのDecideシェイプを行い、Receiveメッセージから他のメッセージを構築しています。それらはすべて正常に動作し、何も上書きしません(後でやろうとしているのと同じプロセスを行います)。

誰かこれまでに見たことがありますか?

ETAは:プロセスは少しこのように動作します:

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

「メッセージを書き出す」とは、送信シェイプを使用して「メッセージを送信する」ことを意味していると仮定しています。 この場合、それぞれの場合に正しいメッセージを効果的に送信するかどうかを確認できますか。あなたの説明では、2番目のメッセージに関連付けられた最初の送信シェイプと、元のメッセージに関連付けられた2番目の送信シェイプを持つ必要があります。 その場合ですか? –

+0

"書き出す"とは、メッセージの中のXMLを取り出し、それをログテーブルに書き込んで、正しい情報が含まれていることを確認します。 – Stephanie

答えて

0

私はあなたの正確な問題を再現することができませんでしたが、私は近くになりました。プロセスの概要には、実際に何が起こっているのかを理解するために重要な黙示的な記述がいくつかあると思います。いずれにせよ、あなたのBizTalkメッセージは上書きされないと思いますが、XmlDocument変数はそうです。

C#で作業しているときに、JavaまたはVB6のバックグラウンドに遭遇した開発者がone of the fundamental confusionsに遭った可能性があります。

C#はマネージド言語

てくださいです、それはオブジェクトへの未使用の参照を再利用するためにガベージコレクタを使用することでC#は、管理言語であることを覚えておいてください。ここでのキーワードはです。参照です。あなたは次の行書くとき

は:基本的に

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

を、あなたは、同じコンテンツへの2つの参照を持っています。すなわち、2つの参照xmlDoc2およびSecondMessageは、割り当てられた文字列を参照します。

したがって、BizTalkメッセージのXMLコンテンツを「書き出す」コードによっては、一部の参照を上書きすることがあります。

さらに、これがConstructシェイプのコンテキストで発生すると、誤ってBizTalkメッセージ自体の内容が上書きされる可能性があります。

解決策?

この問題は通常BizTalkを使用しているときには現れません。私は個人的にこの問題に遭遇したことはありません。

Expression ShapeとAssignmentシェイプの両方の正確なコードで元の質問を更新する場合は、この応答をより適切なガイダンスで更新します。

関連する問題