Compartir vía


Referencias de mensajes en la estructura de asignación de mensajes

Cuando asignas por primera vez un objeto basado en .NET a un mensaje o parte de mensaje, ese mensaje mantiene una referencia al objeto.

Para mejorar la eficiencia y la escalabilidad, el motor de orquestación no realiza una "copia profunda" del objeto: es decir, no copia todo el contenido del objeto en el mensaje.

Si posteriormente asigna el objeto a otro mensaje o parte de mensaje, cualquier modificación en el original da como resultado modificaciones en el segundo mensaje o parte del mensaje. Debe evitar esta práctica, ya que los resultados son impredecibles.

Si necesita que el segundo mensaje o parte de mensaje tenga una copia distinta del objeto, debe asignar el primer mensaje o parte de mensaje al segundo mensaje o parte de mensaje.

Considere el ejemplo siguiente:

Camino incorrecto

myMsg1 = myObj; // assign the first message  
myMsg2 = myObj; // assign the second message (wrong!)  
myMsg2.myInt = 100; // modify the second  
myMsg1.myInt = 5;  

En este caso, myMsg2.myInt se ha sobrescrito y ahora tiene el valor 5.

Manera correcta:

myMsg1 = myObj; // assign the first message  
myMsg2 = myMsg1; // assign the second message (right!)  
myMsg2.myInt = 100; // modify the second  
myMsg1.myInt = 5;  

En este caso, myMsg2.myInt todavía tiene el valor 100, según lo previsto.

Véase también

Construcción de mensajes