Consumiendo Servicios Web RPC/Encoded desde BizTalk

BizTalk Server 2004 hace relativamente fácil el consumir Servicios Web desde orquestaciones, mediante el adaptador de SOAP y el Asistente para Agregar Referencias Web. Usualmente, cuando se agrega una referencia a un Servicio Web, el asistente crea un conjunto de tipos de mensajes multi-parte (tipos de mensaje Web) para cada mensaje de entrada y salida de las operaciones del servicio.

Para Servicios Web estilo Document/Literal, esto funciona perfectamente, ya que los tipos de mensaje multi-parte generados contienen una sola parte cada una (mapeando limpiamente a la definición del mensaje en el WSDL). Esto hace que estos mensajes sean muy fáciles de manipular usando las herramientas estándares de BizTalk Server como los mapas, o incluso manipular los esquemas generados para promover elementos y atributos como campos distinguidos (distinguished fields).

BizTalk también puede consumir servicios estilo RPC/Encoded. Sin embargo, es importante darse cuenta como son generados los tipos de mensaje multi-parte para este tipo de servicios, para saber con que herramientas se cuenta para manipularlos. Al igual que con los servicios Document/Literal, al agregar una referencia Web a un servicio RPC/Encoded, el asistente genera un conjunto de mensajes multi-parte; la diferencia clave aquí es que de hecho estos tipos tendrán múltiples partes: una por cada argumento de entrada (o de salida) declarado en la operación en el WSDL.

Esto es importante porque estos mensajes creados a partir de estos tipos generados deben ser manipulados manualmente, usando expresiones en las orquestaciones. Como los mensajes son completamente multi-parte, es imposible manipularlos como una sola unidad usando herramientas como los mapas y transformaciones.

Otro escenario común con los Servicios Web RPC/Encoded es el uso de parámetros de tipo string que contienen un fragmento XML. Para manipularlos, puede ser deseable definir esquemas XSD independientes para estos fragmentos. Para leer uno de estos fragmentos retornado por el servicio se deberá entonces cargar el string sobre una instancia de XmlDocument y asignarlo a un mensaje del tipo del esquema creado para este propósito. Por el contrario, si lo que se desea es asignar el mensaje creado a parámetro string para enviarlo al servicio, será necesario un componente .NET que convierta el mensaje de BizTalk usado en la orquestación a un string (el componente solo tiene que recibir un XmlDocument como argumento y retornar el OuterXml del mismo).

Autor: Tomas Restrepo

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