Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么WCF OracleDB接收位置会由其FK触发,而不是由其表上的实际更新触发?_Oracle_Biztalk_Biztalk 2010 - Fatal编程技术网

为什么WCF OracleDB接收位置会由其FK触发,而不是由其表上的实际更新触发?

为什么WCF OracleDB接收位置会由其FK触发,而不是由其表上的实际更新触发?,oracle,biztalk,biztalk-2010,Oracle,Biztalk,Biztalk 2010,在我们的接收位置出现奇怪行为: RL_代表正在等待来自代表表的通知(字段:(PK)id、fname、lname等) RL_客户代表正在等待来自客户代表表的通知(字段:(FK)id_rep,(FK)id_CLIENT) 当这两个位置都处于活动状态并且我在CLIENT_representation.id_rep表中提交了一个更改时,我会收到两个警告(显然来自RL_representation) 及 适配器“WCF OracleDB”引发错误消息。详细信息“地址处的WCF服务主机”oracledb:/

在我们的接收位置出现奇怪行为

RL_代表正在等待来自代表表的通知(字段:(PK)id、fname、lname等)

RL_客户代表正在等待来自客户代表表的通知(字段:(FK)id_rep,(FK)id_CLIENT)

当这两个位置都处于活动状态并且我在CLIENT_representation.id_rep表中提交了一个更改时,我会收到两个警告(显然来自RL_representation

适配器“WCF OracleDB”引发错误消息。详细信息“地址处的WCF服务主机”oracledb://d01-isis:1521/D01ISIS/Dedicated?CallingTable=REPRESENTATIVE 出现故障,因此无法在相应的接收位置接收更多消息。若要解决此问题,BizTalk Server将自动尝试重新启动服务主机。“。

否则,通过修改“客户代表”激活的流程不会出现任何问题

(如果我改为更新client_representation中的id_client-错误来自另一个订阅来自client表的通知的接收位置。)

还有两条线索:

  • 如果禁用RLU REPRESENTATIVERLU,则不会出现警告

  • 如果在同一事务中同时更新CLIENT_representation.id_rep和representation.fname并提交两者,则不会出现警告

请注意,这两个表中都没有触发器,我所有的超时都设置为几乎24小时

我怀疑FK约束的工作方式最终会向端口发送通知,但我从未收到我应该接收的实际消息

问题:Oracle中是否有控制此行为的参数?有任何Biztalk开发人员遇到过此问题吗?

可能是:

  • 保存事物的顺序
  • 这是一个事务性问题,在不同的事务上接收位置,因此似乎缺少相关项
  • 与事务性问题相关的锁定问题

跟踪它的方法是在数据库上设置评测,并查看哪些命令以何种顺序发送。

最后,解决方案是将所有接收位置(NotifyOnListenerStart)中的标志更改为“false”

在进一步的开发之后,这个解决方案还没有完成——错误的触发再次发生——所以我将把检查切换到off,直到我(或其他人)找到正确的解决方案

编辑:这是FK的副作用,更改其值似乎会触发包含PK的表中的更改通知(尽管没有任何更改)

The adapter "WCF OracleDB" raised an error message. Details "System.InvalidOperationException: The notification query returned an error. Info="Error". Source="Data". Type="Change".
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.Notification_TryReceive(OracleCommonExecutionHelper executionHelper, Message& wcfMessage)
   at Microsoft.Adapters.OracleDB.OracleDBInboundContract.TryReceive(TimeSpan timeout, Message& message, IInboundReply& reply)
   at Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.TryReceive(TimeSpan timeout, Message& message)
   at System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive(TimeSpan timeout, RequestContext& requestContext)
   at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive(TimeSpan timeout, RequestContext& requestContext)".