如何在WCF定制oracle中不丢失可用轮询数据和post poll语句之间的数据

如何在WCF定制oracle中不丢失可用轮询数据和post poll语句之间的数据,oracle,wcf,biztalk,biztalk-2010,Oracle,Wcf,Biztalk,Biztalk 2010,注意,不确定标题是否是最佳标题 我们有一个BizTalk接收端口,它使用标准的轮询数据、轮询语句和轮询后语句收集数据 现在我们有一个问题,即在运行期间对polled data available语句有效的数据也将由post poll语句更新,因此永远不会被拾取 这会使每天有1或2行数据库被勾选为已处理,而不进行处理。我们已经关闭和打开了环境事务参数,但在我们的测试中这种效果保持不变 这对我来说似乎是一个严重的问题,不可能只有我们有这个问题吗?有办法解决这个问题吗?我一直在考虑编写一个发送端口来更

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

我们有一个BizTalk接收端口,它使用标准的轮询数据、轮询语句和轮询后语句收集数据

现在我们有一个问题,即在运行期间对polled data available语句有效的数据也将由post poll语句更新,因此永远不会被拾取

这会使每天有1或2行数据库被勾选为已处理,而不进行处理。我们已经关闭和打开了环境事务参数,但在我们的测试中这种效果保持不变


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

,听起来投票后的声明有点乐观,或者只是做出了一个错误的假设,特别是所有事情都是由投票后的声明处理的。这不是客户的真正问题

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


如果无法使用存储过程,则Polling语句应设置一个标志,然后Post Poll将仅使用该标志更新记录。

因此,Post Poll语句听起来有点乐观,或者只是做出了一个错误的假设,特别是所有内容都是由Polling语句处理的。这不是客户的真正问题

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


如果无法使用存储过程,则轮询语句应设置一个标志,然后轮询后将仅使用该标志更新记录。

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

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

这样,就不会对重复项进行轮询,您将获得所有信息

此外,如果组中有一个以上的BizTalk服务器,请考虑分离主机,仅用于SQL轮询,并将其集群(或放置一个活动,另一个被动)。轮询在多个主机上工作的方式有时会使获取记录变得很棘手


希望这有帮助

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

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

这样,就不会对重复项进行轮询,您将获得所有信息

此外,如果组中有一个以上的BizTalk服务器,请考虑分离主机,仅用于SQL轮询,并将其集群(或放置一个活动,另一个被动)。轮询在多个主机上工作的方式有时会使获取记录变得很棘手


希望这有帮助

我们一直在研究您的存储过程建议,您是否有一个关于如何在BizTalk中使用存储过程的示例。这非常简单,而且在MSDN和其他地方都有很好的文档记录:模式方面,标记该时间间隔的记录,处理标记的记录,返回标记的记录。这样,每次调用都会“声明”其记录仅在这些记录上有效。我们一直在研究您的存储过程建议,您是否有一个关于如何在BizTalk中使用存储过程的示例。这非常简单,而且在MSDN和其他地方都有很好的文档记录:模式方面,标记该间隔的记录,处理标记的记录,返回标记的记录。这样,每次调用“声明”它的记录只对这些记录有效。您将如何设置这样一个变量。我的意思是,您可以在BizTalk轮询语句中的select期间执行更新吗?@Andy您可以调用存储过程先执行更新,然后执行select count()如何设置这样的变量。我的意思是,您可以在BizTalk轮询语句中的select期间执行更新吗?@Andy您可以调用存储过程先执行更新,然后执行select计数()