c# - ¿Cuál es la mejor manera de crear un nuevo mensaje dentro de Biztalk Orchestration?
(6)
Este tutorial puede ser de alguna ayuda:
Tutorial de BizTalk Server 2006: una caminata por el proceso Creación de servicios con diseño por contrato utilizando BizTalk Server 2006 R2 y Windows Communication Foundation
Estoy buscando sus mejores soluciones para crear una nueva instancia de mensaje basada en un esquema XSD predefinido para ser utilizado dentro de una orquestación de Biztalk.
Los votos adicionales van a las respuestas con ejemplos claros o eficientes o respuestas con enlaces referenciados de calidad.
Para crear un nuevo mensaje, simplemente puede crear un nuevo System.Xml.XmlDocument
y asignarlo a una variable de mensaje. Puede usar los métodos Load
o LoadXml
para cargar el contenido requerido que se ajusta al esquema.
Echa un vistazo a la publicación de mi blog, Diversión con creación de mensajes en BizTalk , para una comparación básica del rendimiento entre varias opciones.
xsd.exe /classes /namespace:MyNamespace myschemafile.xsd
Puede usar esto para generar clases c # para un archivo de esquema dado. El resultado es un archivo .cs que puede incluir en uno de sus proyectos de solución.
Cuando se utiliza dentro de una "Forma de asignación de mensajes", puede instanciar una de estas clases generadas, completar los valores de todas sus propiedades y finalmente asignar la parte del Mensaje a su instancia. Biztalk serializará automáticamente la instancia para usted. Agradable y OO. No hay necesidad de cualquier cosa elegante xlang.
Realmente no tuve mucha suerte con algunas de las otras soluciones, como cargar un Temp XmlDocument con XML codificado, o ir por todo el cerdo y usar documentSpecification.GetDocSchema (). CreateXmlInstance () que otros han sugerido.
¿Que es exactamente lo que está buscando? ¿Se trata simplemente de crear un nuevo mensaje con un contenido fijo (como una especie de plantilla)? ¿O basado en algo más? Realmente necesita aclarar la pregunta y ser más específico para obtener una respuesta adecuada.
Si te estás refiriendo simplemente a crear un mensaje desde cero basado en el tipo de contenido codificado (o cerca de), entonces he descubierto que ponerlos como recursos incrustados en un ensamblado C # de ayuda es una forma bastante limpia de hacerlo. Scott Colestock tiene una explicación bastante buena de esta técnica.
Hay varias opciones cuando se quiere crear una nueva instancia de un mensaje en una orquestación de BizTalk.
Describí los tres que usualmente uso y agrego algunos enlaces en la parte inferior de la respuesta.
La forma de definir cuál es el mejor método realmente depende: el método XMLDocument es en cierto modo el más ordenado, excepto que si el esquema cambia, puede romperse sin que usted lo sepa. Scott Colestock describe algunos métodos para mitigar ese riesgo.
El método de asignación de BizTalk es probablemente el más simple de entender y no se romperá cuando cambie el esquema. Para esquemas pequeños, esta puede ser una buena opción.
Para todos estos métodos, es importante recordar que si desea usar campos distinguidos o propiedades promocionadas, querrá crear elementos vacíos para rellenar. Al intentar asignar valores a elementos que faltan (aunque esos elementos sean opcionales), se golpearán los errores XLANG
tiempo de ejecución.
Mapa BizTalk
La opción más simple es simplemente usar un mapa de BizTalk; ni siquiera necesita necesariamente mapear nada en la instancia creada.
Para crear elementos vacíos, puede asignar un functoid de concatenación de cadenas con un parámetro de cadena vacío.
Asignar un mensaje a otro
Si desea crear una nueva instancia de un mensaje, simplemente puede copiar un mensaje a otro mensaje del mismo esquema, en una forma de asignación de mensajes.
Use una variable XMLDocument
Para esto creas una variable de orquestación de tipo XMLDocument
y luego en una message assignment
utiliza el método LoadXML
para cargar un fragmento XML que coincida con tu esquema. A continuación, asigna el XMLDocument
al mensaje de BizTalk deseado.
varXMLDoc.LoadXml(@"<ns0:SomeXML><AnElementToPopulate></AnElementToPopulate></SomeXML>");
msgYourMessage = varXMLDom;
La inclusión de AnElementToPopulate
permite usar la promoción de propiedades para asignarle.
Pocas veces recuerdo la sintaxis para hacer esto en la parte superior de mi cabeza, esta es mi entrada de blog para recordarme la sintaxis.
Otro enlace aquí detalla algunos métodos.