2015-02-27 1 views
0

Dans mon scénario, j'exécute la procédure de stockage Oracle de l'orchestration MS BizTalk via l'adaptateur WCF-Custom (oracleDBBinding). Cette procédure dans le scénario négatif lançant une exception personnalisée (pl/sql RAISE_APPLICATION_ERROR).Obtention de "ORA-XXX: message XXX non trouvé; produit = RDBMS; installation = ORA" au lieu de l'exception personnalisée sur ODAC 12c

Si BizTalk Envoyer le port est configurer UseAmbientTransactions = False (cela signifie que la transaction ne soit pas élevé pour MSDTC) Je reçois

Un message envoyé à la carte « WCF personnalisé » sur le port d'envoi « MySendPort "avec URI" oracledb: // myoracledb/"est suspendu. Détails de l'erreur: Microsoft.ServiceModel.Channels.Common.TargetSystemException: ORA-20901: Traiter: 26252741.0.0 a déjà été traitée

Si BizTalk Envoyer port est configurer UseAmbientTransactions = True (cela signifie que la transaction élevée pour MSDTC) Je reçois

Un message envoyé à la carte "WCF personnalisé" sur le port d'envoi "MySendPort" avec l'URI "oracledb: // myoracledb /" est suspendu. Détails de l'erreur: Microsoft.ServiceModel.Channels.Common.TargetSystemException: ORA-20901: message 20901 introuvable; produit = SGBDR; installation = ORA ---> Oracle.DataAccess.Client.OracleException: ORA-20901: MySendPort; produit = SGBDR; ORA

Comme vous pouvez le voir lorsque j'active la transaction ambiante sur le port d'envoi, le message d'exception est perdu. Le numéro d'erreur est renvoyé mais le message est remplacé par la chaîne Message XXX non fount. Cela se produit uniquement lorsque je fais face à des exceptions personnalisées effectuées sur le côté oracle, des exceptions comme un nom d'utilisateur et un mot de passe incorrects sont récupérées correctement.

Je me demande si elle est une mauvaise configuration du client Oracle + OracleMTSRecoveryService + MSDTC ou il est un bogue dans le client oracle

Pour mettre cela en contexte je migration ma solution de BizTalk 2009 sur Windows 2008 (boîte physique) à BizTalk 2013R2 sur Windows Server 2012R2 (boîte virtuelle). Sur la vieille propriété (BizTalk2009) la propagation des erreurs fonctionne comme prévu avec les transactions ambiantes activées. Le problème que je rencontre est sur le nouveau domaine BizTalk 2013R2 où j'ai OS nouvelle nouvelle Oracle Client et nouvelle version de BizTalk. Donc je suppose que l'éther je manqué quelque chose dans la configuration/permission ou je fais face à un bogue dans l'adaptateur Oracle Client/WCF Oracle

Mon environnement: Système d'exploitation: Windows 2012R2 client Oracle: 12c (12.1.0) les deux versions 32 et 64 bits version BizTalk: 2013R2 OracleMTSRecoveryService: installé sur Oracle 64 bits client

Répondre

0

Parce que vous soulevez une erreur d'application qui provoque la transaction à annuler puis BizTalk réessaiera et finira par obtenir le message ne erreur trouvée (car la réponse serait rejetée lors de l'annulation).

S'il s'agit d'une exception métier, et non augmentez-la en tant qu'exception d'application, mais renvoyez plutôt un message de réponse contenant l'état, par ex. Processed = OK/ERROR et un nœud ERROR contenant l'échec de l'entreprise.

Vous ensuite traiter ce message de réponse dans BizTalk.