Message Assignment 셰이프에서 메시지 참조
메시지 또는 메시지 파트에 .NET 기반 개체를 처음으로 할당하면 해당 메시지에 개체에 대한 참조가 포함 및 유지 관리됩니다.
효율성과 확장성을 위해 오케스트레이션 엔진은 개체의 "딥 카피"를 수행하지 않습니다. 즉, 개체의 전체 내용을 메시지에 복사하지 않습니다.
이후에 해당 개체를 다른 메시지 또는 메시지 파트에 할당하는 경우 원본을 수정하면 두 번째 메시지 또는 메시지 파트도 수정됩니다. 그러나 결과를 예측할 수 없기 때문에 이렇게 하지 않는 것이 좋습니다.
두 번째 메시지에 개체의 고유 복사본을 포함하려는 경우 첫 번째 메시지 또는 메시지 파트를 두 번째 메시지 또는 메시지 파트에 할당해야 합니다.
다음 예제를 참조하세요.
다음은 잘못된 방법입니다.
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이라는 값을 갖습니다.