我正在关注上述文章,但我想在业务流程中实现这一点
我如何实现这一点请告知,以下是我所知道的一些想法。
使用foreach循环。
a)读取每条消息并添加到
新消息,直到它到达
固定批次
b)使用xpath位置/ [local-name()='Root'和
命名空间URI()=的 'http://mycompany.com'] / [本地名称()= '内容'
和namespace-uri()=''和position()> = 0和position<固定大小](哪个不起作用)
调用自定义pipline组件(如上所述)
首先感谢guyz所有有价值的回复,
现在我在业务流程中使用foreach循环,xpath(toget count和单输入节点)和Message Variable(创建新的无界消息来分配连接的固定no输入消息)实现了这一点。现在工作正常。
你们是否同意这个任命或者你有任何顾虑?
答案 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,这就是我们坚持的“黑客”。