我正在寻找从wcf-sql adapter收到的从SQL Server数据接收的数据。
我用于循环和以下
itostring=i.ToString();
MessageOne=xpath(MessagePolling,"/*[local-name()='MainData' and namespace-uri()='http..["+itostring+"]");
当XPath进入第一个接收消息路径[i]
时这是正确的方法吗?
答案 0 :(得分:6)
有两种方法可以循环BizTalk收到的Xml消息中包含的多个记录:
信封模式
定义表示消息的架构时,请将其标记为信封架构。这告诉接收管道反汇编程序为传入消息中的每个记录(在您的情况下从WCF-SQL适配器)创建(并发布)一条消息到BizTalk消息框。这将导致为传入消息中的每条记录启动单个Orchestration实例。
Richard Seroter在WCF-SQL适配器上发表了一篇很棒的博客文章 - http://seroter.wordpress.com/2010/04/08/debatching-inbound-messages-from-biztalk-wcf-sql-adapter/
请注意,使用这种方法,您不希望从传入消息中取消批量数万条记录,因为BizTalk将停止运行: - )
业务流程中的XPath
如果您不使用信封架构,则将为传入消息(包含多个记录)启动单个Orchestration实例。在Orchestration中的Expression Shape中,您可以使用XPath(和其他一些魔法)循环每个记录,每个记录都提取一个Orchestration变量(然后您可以映射等)。
查看以下链接,这些链接将帮助您通过XPath进行提取:
^还有第三种方法可以实现这一点,因为BizTalk Server 2009(我认为 - 似乎很久以前)可以在Orchestration中执行接收管道,因此您可以执行Envelope de-batching in Orch,而不是接收位置的接收管道。