为什么WCF OracleDB接收位置会由其FK触发,而不是由其表上的实际更新触发?
在我们的接收位置出现奇怪行为: RL_代表正在等待来自代表表的通知(字段:(PK)id、fname、lname等) RL_客户代表正在等待来自客户代表表的通知(字段:(FK)id_rep,(FK)id_CLIENT) 当这两个位置都处于活动状态并且我在CLIENT_representation.id_rep表中提交了一个更改时,我会收到两个警告(显然来自RL_representation) 及为什么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:/
适配器“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并提交两者,则不会出现警告
- 保存事物的顺序
- 这是一个事务性问题,在不同的事务上接收位置,因此似乎缺少相关项
- 与事务性问题相关的锁定问题
跟踪它的方法是在数据库上设置评测,并查看哪些命令以何种顺序发送。最后,解决方案是将所有接收位置(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)".