BizTalk WCF_SQL轮询

BizTalk WCF_SQL轮询,biztalk,Biztalk,我的WCF_SQL接收位置轮询有一个奇怪的问题。BizTalk服务器是BizTalk 2010。轮询每1分钟执行一次,包括执行一个存储过程,从表中选择记录,并将所选记录状态更新为类似“处理”的状态 从ProcessingTable中选择前10个*,其中状态为“新建” 更新ProcessingTable集状态='Processing',其中状态='New' 接收管道是XMLReceive,它将解除记录的争用并路由到另一个编排进行处理。在业务流程结束时,将有一个发送端口,用于将状态更新为“已处理”

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

从ProcessingTable中选择前10个*,其中状态为“新建”

更新ProcessingTable集状态='Processing',其中状态='New'

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


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

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

您是否为此使用了单例模式编排?如果没有,请尝试一次,看看您是否遇到了与我怀疑的相同的问题,它正面临着比赛条件

这在很大程度上取决于您的具体解决方案。在我看来,将您的状态更新为“已处理”的发送端口似乎未被触发。您能否通过查看跟踪来再次检查此发送端口是否已触发?如果是:请检查是否使用正确的参数触发。您的第二个sql语句将导致前10名之外的所有记录都设置为处理,这意味着您的轮询过程将不再在后续周期中拾取它们。这在很大程度上取决于您的特定解决方案。在我看来,将您的状态更新为“已处理”的发送端口似乎未被触发。您能否通过查看跟踪来再次检查此发送端口是否已触发?如果是:请检查是否使用正确的参数触发。您的第二条sql语句将导致前10条之外的所有记录都设置为“正在处理”,这意味着您的轮询过程将不再在后续周期中拾取它们。-1 Singleton orchestration是BizTalk反模式。是的,Tom Singleton也被称为反模式,但在这种情况下,我怀疑在插入RecordsAgology时会发生争用情况,因为它过于草率,对您的答案进行了否决。然而,你应该在回答中解释这一点。我会删除下一票,但它会被锁定,除非你编辑你的答案。没问题,汤姆。我喜欢你的评论和下一票,因为这有助于我更清楚地解释我的答案。-1 Singleton orchestration是BizTalk反模式。是的,Tom Singleton也被称为反模式,但在这种情况下,我怀疑在插入因为鲁莽和轻视你的答案而被记录在案。然而,你应该在回答中解释这一点。我会删除否决票,但它被锁定,除非你编辑你的答案没问题,汤姆,我喜欢你的评论和否决票,因为这有助于我更清楚地解释我的答案。