【问题标题】:What may cause (intermittent) bad responses from an Oracle db to Biztalk?什么可能导致 Oracle 数据库对 Biztalk 的(间歇性)不良响应?
【发布时间】:2011-09-16 09:28:56
【问题描述】:

我的编排有一个发送-接收端口,在找到发送形状之前,所有被操作的消息都是完全相同的。 IE。我最终通过发送接收端口发送 Oracle db 的消息是相同的。

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

问题:来自 db 的响应可能是空的,而且它永远不会是。我期待表中的完整行发生了变化,有时我什么也没有收到。

详细信息:我只是更改最简单的字段来触发这些测试,并且始终是相同的 - 我从 99 到 98 到 97 到 98 递减或递增的整数字段...等等。一个数字可能第一次有效,但第二次无效,或者有时相反。

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

更多细节...:甲骨文的运作似乎有问题。 IE。它处理时间戳的方式可能会导致 Oracle 返回一个空记录,因为它假定 Biztalk 已经收到更改通知。在查看 db 的内部时,我们看到我最后一次更改尝试的时间戳都精确到了同一秒(请注意,这实际上是不可能的)。

看起来,当我向 Oracle 发送消息时,它会执行 两次 似乎导致错误的事情(顺便说一下,有问题的表上没有触发器)。在我的编排中,我在发送消息之前写入事件日志,并且该消息只写入一次......

似乎是 Oracle 的问题。现在,始终如一的工作领域不起作用,而其他领域有时也起作用 - 我想这是之前抽签的运气。

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

【问题讨论】:

  • 所以你没有收到任何错误?只是响应的行为不是你认为应该的?
  • 好吧,多亏了虚假的响应,我稍后在另一个业务流程中收到“无法将 NULL 插入 X 字段”,因为它需要一个它没有得到的 ID 值。否则,Biztalk 不会抱怨。
  • 适配器类型是 WCF-Custom。在上面添加更多细节 - 很可能是 Oracle 运作方式的问题。

标签: oracle oracle10g biztalk biztalk-2010


【解决方案1】:

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

然后,您在响应中期望的实际数据可能必须委派给另一个下游进程来检索。

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

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

希望这会有所帮助。

【讨论】:

  • 我收到的消息仍然是输入的 - 只是空的。主键为空的客户记录...我认为不适合处理 - 这应该返回错误。
  • 在某些方面,响应是否有效取决于操作是否成功。显然,如果对 oracle 的调用失败,那么我们将不得不将其作为异常处理。但如果调用成功而响应失败,这可能会被视为令人讨厌的副作用。
  • 是的,你是对的。我必须请比我更好的人来帮助我解决我应该实施的处理方式。
【解决方案2】:

问题如下:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 2021-04-06
    • 2010-09-15
    • 1970-01-01
    • 2012-09-14
    • 2023-04-04
    • 2016-12-09
    • 1970-01-01
    相关资源
    最近更新 更多