Receive Shape y los tipos de mensajes

Uno de los temas que más se preguntan en los newsgroups es como lograr que diferentes tipos de mensajes puedan ingresar a la misma orquestacion implementando un solo Receive Shape y por ende un solo Receive Port, pero de igual forma poder trabajar con ese mensaje posteriormente como un objeto message.

Una forma sencilla de implementar esta funcionalidad es definir un message adicional tipo System.Xml.XmlDocument y adicionar este mensaje al Receive Shape, luego definir que en el puerto de entrada la propiedad Message Type es tipo .Net Classes igual a System.Xml.XmlDocument, y por último asociar el Receive Shape al Receive Port. (Ver imagen).

En segundo paso es definir una variable de tipo System.Xml.XmlDocument y crear una instancia de esta de acuerdo al mensaje que ha entrado, para ello simplemente basta con establecer en un Expression Shape el siguiente código:

Variable_Xml = (System.Xml.XmlDocument) MessageIn;

Donde Variable_Xml es la variable tipo System.Xml.XmlDocument y MessageIn es el objeto message tipo System.Xml.XmlDocument.
Por último, y para saber el tipo de mensaje que ha ingresado podemos utilizar un Decision Shape y evaluar el namespace del mensaje ingresado con el siguiente código:

Variable_Xml.DocumentElement.NamespaceURI == " https://Scorpio.BizTalk.DotNetTypes.Orchestrations.Inputfile"

Luego de esto, se puede construir un mensaje del tipo deseado y asignarle al nuevo mensaje el mensaje que ingreso (ver imagen):

MessageOracle1 = MessageIn;

Como se puede observar, a un puerto de entra podemos definir varios Receive Location que estén configurados a diferentes orígenes de datos como SQL Server, File, Web Services y posteriormente identificar dicho mensaje de acuerdo al namespace.

Les anexo el código fuente (aqui) y si tiene alguna pregunta, es bienvenida.

Autor: Carlos Medina

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho