我正在寻找循环从 wcf-sql 适配器接收的 SQL Server 数据接收的数据。
我使用 for 循环和以下
itostring=i.ToString();
MessageOne=xpath(MessagePolling,"/*[local-name()='MainData' and namespace-uri()='http..["+itostring+"]");
当 XPath 在为第一个接收消息路径[i]
这是正确的方法吗?
我正在寻找循环从 wcf-sql 适配器接收的 SQL Server 数据接收的数据。
我使用 for 循环和以下
itostring=i.ToString();
MessageOne=xpath(MessagePolling,"/*[local-name()='MainData' and namespace-uri()='http..["+itostring+"]");
当 XPath 在为第一个接收消息路径[i]
这是正确的方法吗?
有两种方法^可以循环 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
如果您不使用信封模式,您将为传入消息(包含多条记录)启动单个编排实例。在您的业务流程中的表达式形状中,您可以使用 XPath(和其他一些魔法)循环每个记录,并将每个记录提取到一个业务流程变量(然后您可以映射等)
查看以下链接,这些链接将帮助您通过 XPath 进行提取:
^从 BizTalk Server 2009 开始,还有第三种方法可以实现这一点(我认为 - 似乎很久以前),您可以在 Orchestration 中执行 Receive Pipeline,因此您可以在 Orch 中执行 Envelope de-batching,而不是接收位置的接收管道。