Una de las técnicas utilizadas para definir mensajes al desarrollar orquestaciones es usar objetos System.Xml.XmlDocument. Sin embargo, es necesario tener cuidado al momento de utilizar el mismo objeto para definir mas de un mensaje usando un sólo "Construction Shape" ya que los mensajes pueden no almacenarse en la base de datos con la información esperada.
El siguiente escenario (ver figura) pretende explicar con más detalle lo comentado.
En la figura se observa como la orquestación construye dos mensajes: Msg2 y Msg3, usando el mismo "Construction Shape" y para ambos mensajes usa el mismo objeto xmlDoc de tipo System.Xml.XmlDocument. Asi, en el primer Message Assigment Shape el siguiente codigo define el Msg2:
// carga xml y asigna el Msg2 xmlDoc.LoadXml("<Root><Field>Field_2</Field></Root>"); Msg2 = xml;
Y en el segundo Message Assigment Shape este codigo define el Msg3:
// carga xml y asigna el Msg3 xmlDoc.LoadXml("<Root><Field>Field_3</Field></Root>"); Msg3 = xml;
En teoria el resultado deberia ser dos archivos diferentes, sin embargo el resultado al ejecutarse la orquestación no es el esperado ya que ambos archivos contienen la misma informacion.
Este inconveniente se debe a dos razones:
Por lo tanto, el objeto xml que se utilizo para definir el Msg2 fue modificado para construir el Msg3 antes de que el mensaje Msg2 se hiciese persistente. Esto ocasiono que el contenido de ambos mensajes en la base de datos sea el mismo.
Esta característica esta presente en las versiones de biztalk 2004/2006/2006r2.