Pregunta

No estoy seguro de si puedo hacer la pregunta adecuada, pero esta es la situación que estoy tratando de ejecutar:

Varios archivos (XML y un par de archivos relacionados, "archivos adjuntos") tiene que entrar en BizTalk como un solo mensaje.He mirado en los adaptadores existentes, y no vemos que se hace con la existente una vez.Para ser más precisos, los archivos son tomadas del sistema de archivos.Los archivos no se encuentran en el mismo tiempo, pero llegan de una en una, cuando el orden no está asegurada.XML (contenido) es el único que sabe lo que los archivos adjuntos que tiene que tener (lo que otros archivos).

Estamos buscando en 2009 de BizTalk y me preguntaba sería que la responsabilidad de un Adaptador personalizado, o algo más.Y se podía mirar para las muestras.

Gracias.

¿Fue útil?

Solución

Es probable que sea posible hacer lo que usted desea utilizar un adaptador personalizado, aunque me gustaría recomendar en contra de ella.Usted puede lograr lo que requiere el uso de la orquestación.

Lo que se busca es la likey un convoy, o al menos algún uso de la correlación.

En BizTalk un convoy de mensajería patrón (a diferencia de un BizTalk característica) que permite a los grupos de mensajes para ser procesados por un solo orquestación.

Básicamente, el uso de la correlación en un puerto de recepción de mensajes de grupo juntos, ya sea en paralelo (lo que probablemente quiera) o de manera secuencial.

Hay un artículo [aquí](http://msdn.microsoft.com/en-us/library/ms942189(BTS.10).aspx) por Stephen W.Thomas acerca de los convoyes (es para BT 2004, pero los conceptos que todavía se mantienen) y hay un montón de información adicional en la web y en los libros (Profesional de BizTalk server 2006 tiene una subsección sobre ellos)

Sin más detalles sobre su escenario es difícil saber exactamente cómo el convoy iba a ser construido, pero a continuación hay dos enfoques para mirar (también, no he tenido la oportunidad de utilizar correctamente BT2009, así que puede ser que el soporte extendido para la correlación de los escenarios que ayudar).

Flexible Correlación

Si usted no sabe nada acerca de los archivos enumerados en el contexto XML, usted probablemente necesitará un patrón como el descrito por Charles Jóvenes en este post.

No uniforme secuencial convoy

Si usted tiene un poco de info antes de la mano, una forma podría ser como sigue (básicamente No uniforme secuencial convoy):

Esto hace que la suposición de que hay alguna manera de vincular a todos los archivos juntos para que usted pueda relacionarlos.

Crear un único orquestación que se suscribe a usted de entrada de recepción del puerto (que contiene el archivo de la ubicación de recepción).

Esta orquestación tendrá una única activación de recibir la forma que se establece para el archivo de contenido.

Una vez que la orquestación es iniciado por un archivo de contenido de una segunda correlación recibir la forma empieza a recoger los mensajes que coinciden con el contenido del archivo.(esta segunda recibirán podría ser posible en un bucle para permitir un número variable de archivos)

Entonces pack todo junto en un solo archivo de salida de su diseño y enviarlos a cabo una vez que el número total de archivos que se ha recibido.

Otros consejos

Me parece que un mejor enfoque sería la implementación de los requisitos anteriores con una combinación de un componente de canalización personalizado y / o un adaptador personalizado. Asumo que realmente no necesita para manipular los archivos entrantes - excepto el archivo XML contenidos - o que no se podía ya que están en formato binario. Esto requiere de un componente de canalización personalizado.

Lo que puede hacer es desarrollar un adaptador de BizTalk personalizada para interactuar con el sistema de archivos y para implementar la lógica de escucha y bucles. A continuación se puede desarrollar un componente de canalización personalizado para crear un único mensaje de BizTalk tal vez con el tipo de datos base 64 en él para datos binarios. Además también se puede promover mensajes justo en este componente para permitir los registros de orquestación.

Las orquestaciones son más adecuados para la implementación de escenarios de flujo de trabajo de negocios donde los mensajes ya están en formato XML. Este no parece ser el caso. En cualquier caso, creo que sería necesario en el componente a menos de canalización personalizado.

La respuesta de David es la respuesta correcta.

Incluso en los casos en que no conoce absolutamente nada sobre el contenido de los archivos adjuntos esperados, seguramente usted sabe sus nombres y ubicaciones. Por lo tanto se puede utilizar el Correlación flexible vinculado a David en la respuesta de la siguiente manera:

La clave para la solución es correlacionar en la propiedad BTS.ReceivedFileName incorporado.

En primer lugar, crear una canalización de recepción personalizada, con un componente de canalización personalizado que promueve la propiedad de contexto BTS.ReceivedFileName de los mensajes recibidos. Este componente personalizado simple es bastante fácil de escribir, pero que puede hacer que sea sencillo mediante el uso de marcos de terceros, tales como, ( enchufe descarado, aquí ) mi clase PipelineComponentBase o la excelente Asistente para componentes de BizTalk Server Pipeline .

Ahora viene la parte fácil:

  • Los archivos adjuntos se reciben en un lugar específico, designado por su trayectoria en el sistema de archivos.
  • Crear una ubicación de recepción que escucha a una ubicación alternativa , utilizado sólo para controlar cuando los archivos son en realidad tragados por BizTalk.
  • En su orquestación, crear un tipo de correlación con la propiedad BTS.ReceivedFileName y una base de establecer una correlación de este tipo de correlación.
  • Si desea recibir archivos adjuntos binarios, enviar un mensaje maniquí con la propiedad de contexto BTS.ReceivedFileName establece en el nombre del fichero adjunto binario pero con el camino que coincide con el ubicación alternativa ; la utilizada por la ubicación de recepción. Inicializar la correlación de la forma de envío.
  • Utilice una forma de expresión para copiar el archivo binario de su ubicación original a la utilizada por la ubicación de recepción.
  • Por último, utilizar una forma de recibir unido al puerto de recepción que contiene la ubicación de recepción cuya canalización de recepción personalizada promoverá la propiedad BTS.ReceivedFileName.

Tenga en cuenta que en realidad se necesita enviar un mensaje con el fin de inicializar la correlación. No importa qué mensaje se envía en realidad. Lo que haría es enviar el mensaje a través de una canalización de envío que contiene un vacío componente de canalización. Que es un componente de canalización que lee el mensaje, pero devuelto nulo (de modo que el mensaje desvanece en el aire antes de que llegue el adaptador). Una solución más elaborada sería el uso de un adaptador de nula. Esto es un adaptador que lee el mensaje, pero no hace nada al respecto.

Estas dos soluciones evitar tener muchos archivos se acumulan en una ubicación temporal en alguna parte, por el simple hecho de inicializar una correlación!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top