0

J'ai une solution BizTalk qui appelle une procédure stockée qui interrogera et mettra à jour la table. Apparemment, je rencontre cette erreur chaque fois que je teste ma solution dans un serveur à charge équilibrée.Le gestionnaire de transactions MSDTC n'a pas pu pousser la transaction en utilisant AmbientTransaction

L'adaptateur n'a pas réussi à transmettre un message va envoyer le port SQLAdapter_Sendport » avec l'URL « MSSQL:.. // serveur // StoredProc » Il sera retransmis après l'intervalle de nouvelle tentative spécifié pour ce port d'envoi

Détails: System.Transactions.TransactionManagerCommunicationException:. la communication avec le gestionnaire de transactions sous-jacente a échoué

System.Runtime.InteropServices.COMException: le gestionnaire de transactions MSDTC n'a pas pu pousser la transaction au gestionnaire de transactions de destination en raison de problèmes de communication . Les causes possibles sont: un pare-feu est présent et il n'y a pas d'exception pour le processus MSDTC, les deux machines ne peuvent pas se trouver par leurs noms NetBIOS ou le support des transactions réseau n'est pas activé pour l'un des deux gestionnaires de transactions.

Exception de HRESULT: 0x8004D02A)
à System.Transactions.Oletx.ITransactionShim.Export (UInt32 whereaboutsSize, byte [] localisation, Int32 & cookieIndex, UInt32 & cookieSize, CoTaskMemHandle & cookieBuffer)
à System.Transactions. TransactionInterop.GetExportCookie (transaction de transaction, Byte []) sort
--- Fin de la trace de la pile d'exception interne ---

J'ai lu quelques articles que je définir les propriétés DTC comme bel ow Ces paramètres sont déjà définis dans les serveurs BizTalk et SQL.

enter image description here

De plus, le DTC doit être ajouté dans le pare-feu Windows.

enter image description here

Et enfin si le useAmbientTransaction dans les propriétés Envoyer Port est définie sur True je continue de rencontrer cette erreur ci-dessus.

enter image description here

Mais si je mets le useAmbientTransaction False le message suivant est dans SQL.

J'ai lu dans un article que Microsoft ne recommande pas de définir useAmbientTransaction sur False, surtout si Update et Delete impliquent dans la procédure stockée. Mais ma solution utilise la suppression et la mise à jour dans la procédure stockée, c'est pourquoi j'ai besoin de mettre la propriété useAmbientTransaction à True. Mais si je fais cela je continue à rencontrer l'erreur "gestionnaire de transaction MSDTC n'a pas pu pousser la transaction à la destination ..."

S'il vous plaît suggérer une solution possible pour cela.

+0

Est-ce la base de données que vous connectez à un configuré dans le cadre d'un toujours sur le groupe de disponibilité? P.S. cela aide si vous étiquetez vos questions avec biztalk si elles sont des questions liées à BizTalk. – Dijkgraaf

Répondre

0

Si vous vous connectez à une base de données dans un groupe de disponibilité AlwaysOn, vous devez désactiver useAmbientTransaction car AlwaysOn ne prend pas en charge MSDTC, sauf pour SQL Server 2016.

Le même article pour SQL Server 2014 Cross-Database Transactions Not Supported For Database Mirroring or AlwaysOn Availability Groups (SQL Server)

vs

SQL Server 2016 Cross-Database Transactions and Distributed Transactions for Always On Availability Groups and Database Mirroring (SQL Server)

+0

Merci Dijkgraaf pour la réponse. J'ai vérifié que notre base de données utilise AlwaysOn Availability Group, donc j'ai désactivé useAmbientTransaction. – Artline157

+0

@Noel Si ma réponse résout votre problème, vous devez le marquer comme la réponse (cocher la case correspondante) – Dijkgraaf