Distributed transaction terminée. Soit inscrire à cette session dans une nouvelle opération ou de la transaction de NULL
Juste curieux de savoir si quelqu'un d'autre a eu cette erreur et sait comment le résoudre?
Le scénario est comme suivre...
Nous avons une ASP.NET application web en utilisant Entreprise de la Bibliothèque en cours d'exécution sur Windows Server 2008 IIS ferme la connexion à un cluster SQL Server 2008 back-end.
Ms DTC est activé. DB connections sont mis en commun.
De mes soupçons, c'est que quelque part le long de la ligne, il y a un échec de MSDTC transaction, la connexion suis retourné à la piscine et à la prochaine requête sur une autre page est de ramasser le comportement anormal de connexion et obtenu cette erreur. La chose drôle est que nous avons cette erreur sur une requête qui n'a pas besoin que ce soit avec distributed transaction (s'engager pour deux base de données, etc.). Nous n'étions que de faire une requête select (pas d'opération) quand nous sommes arrivés à l'erreur.
Nous n'avons SQL de Profilage et de la requête se courait sur le Serveur SQL server, mais ne revint jamais (depuis le MSDTC transaction a déjà été abandonnée dans la connexion).
Quelques autres erreurs liées à accompagner ce sont:
- Nouvelle demande n'est pas autorisé à prendre le départ
car il doit être valide
descripteur de transaction. - Interne .Net Framework Fournisseur de Données erreur 60.
- Avez-vous trouver quelque chose à ce sujet? - Je l'obtenir lors de l'insertion des plus grands ensembles de données (> 10K lignes).
Vous devez vous connecter pour publier un commentaire.
Une prime peut aider à obtenir la réponse que vous cherchez, mais vous allez probablement obtenir de meilleures réponses, si vous donner quelques exemples de code et de donner une meilleure description du moment où l'erreur se produit.
L'erreur seulement par intermittence se produire? On dirait qu'elle à partir de votre description.
Êtes-vous joignant le proche de vous que vous voulez à faire une transaction dans un
using TransactionScope
bloc que Microsoft recommande? Cela devrait vous aider à éviter l'étrange comportement de la transaction. Rappelons qu'unusing
bloc permet de s'assurer que l'objet est toujours disposé indépendamment des exceptions levées. Voir ici: http://msdn.microsoft.com/en-us/library/ms172152.aspxSi vous utilisez
TransactionScope
il y a un argumentSystem.TransactionScopeOption.RequiresNew
qui raconte le cadre de toujours créer une nouvelle transaction pour ce bloc de code:Aussi, si vous êtes suspect qu'une connexion est prise en défaut et ensuite remis dans le pool de connexion, qui est probablement la solution est de placer le code qui peut se mettre en défaut la connexion dans un bloc Try-Catch et
Dispose
la connexion dans le bloc catch.MSDTC a défaut de 90 secondes, si une requête à exécuter dépasser cette limite de temps, cette erreur se produit lorsque la transaction est d'essayer de s'engager.
Vieille question ... mais rencontré ce problème depuis quelques jours.
Ne pouvait pas trouver une bonne réponse jusqu'à maintenant. Je voulais juste partager ce que j'ai trouvé.
Mon scénario contient plusieurs sessions d'être ouvert par plusieurs session usines. J'avais correctement, de restauration et d'attendre, et assurez-vous que les autres opérations ne sont plus actives. Il semble qu'il suffit de rouler en arrière, l'un d'eux restauration tout.
Mais après l'ajout de la Thread.Sleep() entre les restaurations, il ne fait pas l'autre et continue bien avec la restauration. Ultérieure hits qui déclenchent la méthode n'étaient pas le résultat de la "Nouvelle demande n'est pas autorisé à démarrer car il doit venir avec le descripteur de transaction valide." erreur.
https://gist.github.com/josephvano/5766488
J'ai vu ça avant, et la cause a été exactement ce que vous avez pensé. Que le Riz a suggéré, assurez-vous que vous êtes correctement l'élimination de la db des objets liés à éviter ce problème.