【发布时间】: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