如何在WCF自定义oracle中丢失可用轮询数据和轮询后语句之间的数据

时间:2014-04-01 13:29:07

标签: oracle wcf biztalk biztalk-2010

注意,不确定标题是否是最佳标题

我们有一个BizTalk接收端口,可以使用标准轮询数据avaible,polling语句和post poll语句收集数据。

现在我们遇到的问题是,在运行期间对轮询数据avaible语句有效的数据也将由post poll语句更新,因此永远不会被选中。

这样就可以每天留下1或2个数据库行,并在未经处理的情况下进行处理。我们已关闭环境事务参数,但在我们的测试中这种效果保持不变。

对我来说,这似乎是一个严重的问题,我们不是唯一有这个问题的人吗?有办法解决这个问题吗?我一直在考虑编写一个更新数据库而不使用postpoll语句的sendPort,但这将是一个额外的逻辑,我无法看到一种方法来做到这一点,而不是为每个项目制作Orchestration最佳实践建议(尝试使用直接绑定发送接收端口)

2 个答案:

答案 0 :(得分:2)

所以,听起来像Post Poll语句有点乐观或只是做出错误的假设,特别是Polling语句处理了所有内容。这对客户来说确实不是问题。

我的建议是放弃可用的轮询数据,并使用存储过程进行投票和民意调查。 SP应仅返回“已处理”的记录,以便在下一个时间间隔内获取任何新记录。

如果您无法使用存储过程,则轮询语句应设置标志,然后邮件投票将仅更新具有该标志的记录。

答案 1 :(得分:2)

如果您可以控制要轮询的数据库表,请再添加一个uniqueidentifier类型的列。在执行PollingDataAvailable语句时,将变量设置为newid()并使用该ID更新列+将其保存到要读取的位置(最好是另一个表)。

在PollingStatement中,您可以从单独的表中读取最后一个GUID,只获取实际轮询表中已更新的内容+将其标记为已处理。

这样,不会重复查看重复项,您将获得所有内容。

此外,如果组中有多个BizTalk服务器,请考虑分离主机,仅用于SQL轮询和群集服务(或者将一个主动,另一个分配为被动)。轮询与多个主机一起工作的方式有时会使获取记录变得棘手。

希望这有帮助!