在我的场景中,我通过 WCF 自定义适配器 (oracleDBBinding) 从 MS BizTalk 业务流程执行 oracle 存储过程。此过程在负面情况下抛出自定义异常 (pl/sql RAISE_APPLICATION_ERROR)。
如果 BizTalk 发送端口配置 UseAmbientTransactions = False (这意味着事务没有提升到 MSDTC)我得到
使用 URI“oracledb://myoracledb/”在发送端口“MySendPort”上发送到适配器“WCF-Custom”的消息被挂起。错误详情:Microsoft.ServiceModel.Channels.Common.TargetSystemException: ORA-20901: Deal: 26252741.0.0 has already been processed
如果 BizTalk 发送端口配置 UseAmbientTransactions = True (这意味着事务提升到 MSDTC)我得到
使用 URI“oracledb://myoracledb/”在发送端口“MySendPort”上发送到适配器“WCF-Custom”的消息被挂起。错误详细信息:Microsoft.ServiceModel.Channels.Common.TargetSystemException:ORA-20901:找不到消息 20901;产品=关系型数据库;设施=ORA ---> Oracle.DataAccess.Client.OracleException: ORA-20901: MySendPort; 产品=关系型数据库;设施=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 客户端/WCF Oracle 适配器中的错误
我的环境: 操作系统:Windows 2012R2 Oracle 客户端:12c (12.1.0) 32 位和 64 位 BizTalk 版本:2013R2 OracleMTSRecoveryService:安装在 64 位 oracle 客户端上