Es una práctica común entre los desarrolladores de BizTalk Server crear componentes de pipelines específicos con el objetivo de personalizar el tratamiento de los mensajes recibidos y/o enviados a través del motor de mensajería de BizTalk Server, pero ¿Qué sueles hacer para probarlos?
En el SDK puedes encontrar herramientas de consolas como Pipeline.exe, FFAsm.exe, XmlAsm.exe, etc.("C:\Program Files\Microsoft BizTalk Server 2006\SDK\Utilities\PipelineTools"). Cuando queremos comprobar el mensaje resultante pueden ser de mucha utilidad.
La otra opción es desplegar los pipelines en BizTalk Server y probarlos directamente en el servidor. Y ¿si queremos depurar? entonces la cosa se complica porque tenemos que abrir el proyecto en Visual Studio y adjuntarse al proceso de BizTalk (BTSNTSvc.exe).
Personalmente me gusta probar unitariamente mis componentes sin necesidad de desplegarlos en el servidor; simplificando en todo lo posible las tareas a realizar y el tiempo empleado en ello, además como es lógico, posibilitando que estas pruebas se puedan repetir de forma más o menos automática para garantizar que durante el avance del desarrollo algo deje de funcionar sin darme cuenta.
Te recomiendo que pruebes (valga la redundancia) la herramienta " Pipeline Testing " que ha publicado Tomas Restrepo en su blog . Se trata de una utilidad que nos ayudará a probar unitariamente nuestros componentes personalizados de Pipeline sin tener que desplegarlos en el servidor de BizTalk y facilitando la depuración de estos.
Su uso es muy sencillo, y se puede resumir en 4 pasos:
1) Referenciar
- La librería de Tomas: Winterdom.BizTalk.PipelineTesting.dll
- El proyecto o proyectos que contiene el pipeline a probar, así como los artefactos necesarios (por ejemplo, los esquemas)
- Opcionalmente, tu framework de pruebas unitarias favorito: nUnit o las incluidas Visual Studio
2) Importar los namespaces
using NUnit.Framework;
using Winterdom.BizTalk.PipelineTesting;
using Winterdom.BizTalk.PipelineTesting.Simple;
3) Un poco de código
SendPipelineWrapper pipeline = PipelineFactory.CreateSendPipeline(typeof(MiProyecto.Pipelines.MiPipelineSalida));
pipeline.AddDocSpec(typeof (MiProyecto.Esquemas.MiEsquema));
Stream stream = DocLoader.LoadStream("MiInstancia.xml");
IBaseMessage inputMessage = MessageHelper.CreateFromStream(stream);
MessageCollection msgCollection = new MessageCollection();
msgCollection.Add(inputMessage);
IBaseMessage outputMessage = pipeline.Execute(msgCollection);
4) y a probar :)