在编排中发送传入消息并创建固定批输入消息?

时间:2010-12-21 04:25:00

标签: biztalk

http://blogs.msdn.com/b/brajens/archive/2006/07/20/biztalk-custom-receive-pipeline-component-to-batch-messages.aspx

我正在关注上述文章,但我想在业务流程中实现这一点

我如何实现这一点请告知,以下是我所知道的一些想法。

  1. 使用foreach循环。
     a)读取每条消息并添加到 新消息,直到它到达 固定批次
       b)使用xpath位置/ [local-name()='Root'和 命名空间URI()=的 'http://mycompany.com'] / [本地名称()= '内容' 和namespace-uri()=''和position()> = 0和position<固定大小](哪个不起作用)

  2. 调用自定义pipline组件(如上所述)


  3. 首先感谢guyz所有有价值的回复,

    现在我在业务流程中使用foreach循环,xpath(toget count和单输入节点)和Message Variable(创建新的无界消息来分配连接的固定no输入消息)实现了这一点。现在工作正常。

    你们是否同意这个任命或者你有任何顾虑?

2 个答案:

答案 0 :(得分:2)

最好的解决方案确实是使用自定义管道组件,例如您问题中链接的组件。这样做的好处是您可以从业务流程中调用管道,而不需要将其绑定到特定的接收位置: http://geekswithblogs.net/sthomas/archive/2005/06/16/44023.aspx

请注意,您提到的样本组件未使用流媒体技术;这意味着它将原始消息的全部内容加载到内存中。如果您打算处理可能较大的消息(这通常是使用debatching的原因),这可能是一个问题。

答案 1 :(得分:2)

实现高吞吐量(大消息和/或大量消息)的一种简单方法是通过使用自定义XSLT的接收端口中的映射运行传入消息。然后,该映射将XML组合成正确大小的组 - 在映射之后,XML可能看起来像这样。

<ns0:sample xmlns:ns0='http://MGSIBREDemo.LoanRequest' xmlns:ns1='http://MGSIBREDemo.LoanRequestGroup'>
 <ns1:group>
  <data1><name>name1</name></data1>
  <data1><name>name2</name></data1>
  <data1><name>name3</name></data1>
  <data1><name>name4</name></data1>
 </ns1:group>
 <ns1:group>
  <data1><name>name5</name></data1>
  <data1><name>name6</name></data1>
  <data1><name>name7</name></data1>
  <data1><name>name8</name></data1>
 </ns1:group>
 <ns1:group>
  <data1><name>name9</name></data1>
  <data1><name>name10</name></data1>
 </ns1:group>
</ns0:sample>

在第一步之后,您将不得不从BizTalk发送消息并再次接收它。然后,您可以使用普通的XML dissasebler 管道组件来分发消息(例如,描述为here)。

这项技术的一大优势是,您将在端口中使用BizTalk映射来转换消息和开箱即用的管道组件。这两个都处理流媒体中的消息,你将能够处理大消息和大量消息。

但是,当您将消息写入磁盘或队列然后再将其读回来时,不利因素会导致性能下降。

如果可以使用XML汇编程序在发送方面进行分发,那就太好了,但今天这是不可能的。

因此,除非你可以将所有消息读入内存(使用XmlDocument),或者花时间编写自己的流式Xml dissasmbler,这就是我们坚持的“黑客”。