最初に .NET ベースのオブジェクトをメッセージまたはメッセージの一部に割り当てると、そのメッセージはオブジェクトへの参照を保持し、維持します。
効率とスケーラビリティのために、オーケストレーション エンジンはオブジェクトの "ディープ コピー" を行いません。つまり、オブジェクトの内容全体をメッセージにコピーすることはありません。
その後、オブジェクトを別のメッセージまたはメッセージ部分に割り当てると、元のオブジェクトに対する変更が、2番目のメッセージまたはメッセージ部分にも影響します。 結果は予測できないため、この方法は避ける必要があります。
2 番目のメッセージにオブジェクトの個別のコピーが必要な場合は、最初のメッセージまたはメッセージ部分を 2 番目のメッセージまたはメッセージ部分に割り当てる必要があります。
次の例を確認してください。
間違った方法:
myMsg1 = myObj; // assign the first message
myMsg2 = myObj; // assign the second message (wrong!)
myMsg2.myInt = 100; // modify the second
myMsg1.myInt = 5;
この場合、myMsg2.myInt が上書きされ、値が 5 になりました。
正しい方法:
myMsg1 = myObj; // assign the first message
myMsg2 = myMsg1; // assign the second message (right!)
myMsg2.myInt = 100; // modify the second
myMsg1.myInt = 5;
この場合も、myMsg2.myInt の値は 100 のままです。