0

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

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

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

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

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

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

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

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

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

4

2 回答 2

0

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

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

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

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

希望这可以帮助。

于 2011-09-17T18:25:46.873 回答
0

问题如下:

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

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

于 2011-09-19T15:42:04.577 回答