什么可能导致(间歇性)从Oracle db到Biztalk的错误响应?

时间:2011-09-16 09:28:56

标签: oracle oracle10g biztalk biztalk-2010

我的业务流程有一个发送 - 接收端口,直到找到发送形状的点为止,所有被操作的消息都完全相同。即我最终通过发送 - 接收端口发送Oracle数据库的消息是相同的。

基本上,我正在向db发送一个请求,该请求说明我希望从哪个表中获取最新的更改以及该表的所有者是谁。正如我所提到的,当比较一个有效的更新和一个没有的更新时:到目前为止,两个请求消息都是相同的。

问题:来自db的响应可能为空,应该永远不会。我希望表中的完整行能够改变,有时我什么也得不到。

详细信息:我只是更改最简单的字段来触发这些测试并始终是相同的 - 一个整数字段,我递减或从99增加到98到97到98 ......一个号码可能第一次起作用而不是第二次起作用,或者有时候相反。

任何其他字段都可能产生此错误。

更多细节...... :似乎Oracle的功能可能有问题。即它处理时间戳的方式可能导致Oracle返回空记录,因为它假定Biztalk已经通知了更改。在查看数据库的内部时,我们看到我的最后一次更改尝试都被加时间戳到相同的秒(实际上不可能,请注意)。

似乎,当我向Oracle发送消息时,它会执行两次的事情,这似乎导致错误(顺便说一下,违规表上没有触发器)。在我的业务流程中,我在发送消息之前写入了事件日志,并且该消息只写了一次......

似乎可能是Oracle问题。现在,持续工作的领域不起作用,有时候其他领域也有效 - 我猜这是以前的抽奖运气。

为什么我认为这种情况正在发生:我要求它给我的客户端(数据库告诉我)已经改变了它(不知何故 - 这是个谜)运行它的检索两次。它工作的时间,它是第一个将消息返回给Biztalk的检索,因此具有实际信息。如果没有,那是因为第二次检索要求进行最新的更改而没有,因为第一次检索已经得到它们,因此返回一个空记录。

2 个答案:

答案 0 :(得分:0)

虽然我没有针对您的问题的具体修复,但解决方案可能在于考虑如何处理获得null响应的实例。如果发生这种情况会导致下游问题,因此如果您无法解决问题,那么您应该编写接受空响应作为有效响应的代码。

然后可能会出现这样的情况,即您在响应中期望的实际数据必须委托给另一个下游流程进行检索。

但是,即使在某些情况下您需要进行多个不同的调用,仍然可以将其视为单个逻辑接口。

要处理空响应,您可以通过将入站响应强制转换为XmlDocument来修改入站端口以期望未键入的消息。

希望这会有所帮助。

答案 1 :(得分:0)

问题如下:

  • 另一位开发人员在另一台服务器上设置了类似的业务流程。这将向正在开发的业务流程并行发送类似的消息给Oracle。

这就是为什么我们只会得到一条日志消息,因为只有我知道的编排才实现了。