BizTalk WCF_SQL 轮询

Posted

技术标签:

【中文标题】BizTalk WCF_SQL 轮询【英文标题】:BizTalk WCF_SQL Polling 【发布时间】:2014-09-30 04:02:55 【问题描述】:

我的 WCF_SQL 接收位置轮询有一个奇怪的问题。 BizTalk 服务器是 BizTalk 2010。轮询每 1 分钟执行一次,涉及执行一个 Stored_Proc 从表中选择记录并将所选记录状态更新为“处理中”

Select top 10 * from ProcessingTable where Status = 'New'

Update ProcessingTable Set Status = 'Processing' where Status = 'New'

接收管道是 XMLReceive,它将分批记录并路由到另一个编排进行处理。在编排结束时,将有一个发送端口,用于将状态更新为“已处理”。

问题来了,在我们进行维护和 BizTalk DB/应用程序服务器关闭期间,主机实例将关闭,这些记录将停留在“新”状态。在初始化维护和主机实例后,这些记录将立即被提取并将其状态更新为“处理中”。奇怪的是,它一直停留在这种状态,并且永远不会继续更新为“已处理”。这只发生在前 10 条记录(第一次提取/提取)。随后,所有其他剩余的“新”记录都被拾取并成功处理。目前的解决方法是始终监控那些卡在“处理”中的记录,并再次将这些记录更新为“新”以重新触发处理。谁有这个问题的答案?

【问题讨论】:

这在很大程度上取决于您的具体解决方案。在我看来,将您的状态更新为“已处理”的发送端口没有被触发。您能否通过查看跟踪来仔细检查此发送端口是否被触发?如果是:请检查是否使用正确的参数触发。 您的第二条 sql 语句将导致前 10 名之外的所有记录都设置为“处理”,这意味着您的轮询过程将不再在后续循环中提取它们。 【参考方案1】:

您是否为此使用过单例模式编排?如果不是,请尝试一次,看看您是否遇到与我怀疑它面临竞争条件的问题相同的问题

【讨论】:

-1 单例编排是 BizTalk 反模式 是的,Tom Singleton 也被称为反模式,但在这种情况下,我怀疑在插入记录时会发生竞争情况 对您的鲁莽和否决您的回答表示歉意。但是,您应该在回答中对此进行了解释。我会删除反对票,但除非您编辑答案,否则它会被锁定 没问题,汤姆,我喜欢你的评论和反对票,因为它有助于我更清楚地解释我的答案。

以上是关于BizTalk WCF_SQL 轮询的主要内容,如果未能解决你的问题,请参考以下文章

BizTalk域用户和用户组配置说明

PowerShell BizTalk 脚本不使用 PowerShell 的 BizTalk 提供程序

通过 BizTalk 编排调用 .Net 类的错误

如何设置多开发者 Biztalk 环境?

BizTalk管理实践

如何在 BizTalk 自定义管道中实现下拉列表