首次将基于.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,如预期所示。