在我的场景中,我正在通过WCF-Custom适配器(oracleDBBinding)从MS BizTalk业务流程执行oracle存储过程。 这个程序在负面场景中抛出自定义异常(pl / sql RAISE_APPLICATION_ERROR)。
如果配置BizTalk发送端口UseAmbientTransactions = False(这意味着事务没有提升到MSDTC)我正在
在发送端口“MySendPort”上发送到适配器“WCF-Custom”并且URI为“oracledb:// myoracledb /”的消息被暂停。 错误详细信息:Microsoft.ServiceModel.Channels.Common.TargetSystemException:ORA-20901:Deal:26252741.0.0已被处理
如果配置BizTalk发送端口UseAmbientTransactions = True(这意味着事务升级到MSDTC)我正在
在发送端口“MySendPort”上发送到适配器“WCF-Custom”并且URI为“oracledb:// myoracledb /”的消息被暂停。 错误详细信息:Microsoft.ServiceModel.Channels.Common.TargetSystemException:ORA-20901:找不到消息20901;产物= RDBMS; facility = ORA ---> Oracle.DataAccess.Client.OracleException:ORA-20901:MySendPort;产物= RDBMS;设施= ORA
因此,当您在发送端口上启用环境事务时,您可能会看到异常消息丢失。返回错误号,但消息替换为字符串Message XXX not fount。只有当我处理在oracle端突袭的自定义异常时才会发生这种情况,正确检索错误用户名和密码等异常。
我想知道oracle客户端+ OracleMTSRecoveryService + MSDTC的配置是否错误,或者它是oracle客户端的错误
在上下文中我将我的解决方案从Windows 2008(物理盒)上的BizTalk 2009迁移到Windows Server 2012R2(虚拟盒)上的BizTalk 2013R2。在旧版本(BizTalk2009)上,错误传播按预期启用环境事务处理。我遇到的问题是新版本的BizTalk 2013R2,我有新的操作系统新的Oracle客户端和新的BizTalk版本。所以我想那个以太我在配置/许可中遗漏了一些东西,或者我正在处理Oracle Client / WCF Oracle Adapter中的错误
我的环境: 操作系统:Windows 2012R2 Oracle客户端:12c(12.1.0),版本分别为32位和64位 BizTalk版本:2013R2 OracleMTSRecoveryService:安装在64位oracle客户端
答案 0 :(得分:0)
因为您引发的应用程序错误会导致事务回滚,然后BizTalk将重试并最终会收到Message not found错误(因为响应将在回滚时被丢弃)。
如果是商业例外,您应该不将其作为应用程序例外提出,而是传回包含该状态的响应消息,例如: Processed = OK / ERROR和包含业务失败的ERROR节点。
然后在BizTalk中处理该响应消息。
答案 1 :(得分:0)
我知道这是一个旧线程,但是我发现将系统环境变量ORAMTS_SESS_REGISTERUCB
设置为false
可以解决此问题。
我不完全理解为什么,因为执行Google搜索仅在搜索环境变量-ORAMTS_SESS_REGISTERUCB
时返回单个结果。
这可能与体系结构类型有关,因为我发现在 Oracle Services for Microsoft Transaction Server 中同时安装ODAC_x86
和ODAC_x64
工具时会引入这种结构。