2009-04-23 4 views
3

J'ai reçu l'erreur suivante lorsque j'ai essayé d'exécuter une application C# WinForms sur une machine Windows Server 2003 Standard Edition SP1 qui se connectait à un serveur SQL 2000, en convertissant les données dans l'application WinForms et insérer le converti dans une application SQL Server 2005. Je me connecte à chaque base de données en utilisant SSPI.HRESULT: 0x8004D00E en utilisant TransactionScope - C#

Le code a été contenu dans un bloc TransactionScope:

System.TimeSpan TransactionTimeOut = new TimeSpan(0, 40, 0); 

    using(TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionTimeOut)) 
    { 
     try 
     { 
      //meat of transaction... 
     } 
     catch(Exception ex) 
     { 
      throw ex; 
     } 

     Scope.Complete(); 
    } 

Messages d'erreur:

Exception: La transaction a déjà été implicitement ou explicitement commis ou avortés.

Exception interne: La transaction a déjà été implicitement ou explicitement validée ou annulée (Exception de HRESULT : 0x8004d00e)

Tout savoir ce qui pourrait être la cause de ce problème?

+0

Sur quelle ligne soulève-l'exception? Et, pourquoi attrapez-vous l'exception à l'intérieur en utilisant le bloc? – shahkalpesh

+0

Je cours l'application sur un serveur distant, donc je ne peux pas capturer le numéro de ligne. Je mets le bloc try/catch dans l'instruction using car c'est le seul endroit où j'établis une connexion et traite les données. –

Répondre

4

Vérifiez que le DTC est démarré sur la machine où votre code est en cours d'exécution. Étant donné que vous utilisez 2 connexions dans la transactioncope, la transaction sera promue à une transaction basée sur DTC.

De même, vérifiez que la sécurité est configurée correctement (cochez cette case en autorisant une participation anonyme à la transaction DTC) et que votre pare-feu autorise le DTC à l'effectuer.

Découvrez ce forum FAQ: Distributed Transaction Coordinator(MSDTC) and Transaction FAQ

[associés à cette question SO: Distributed Transaction Coordinator]

+0

DTC est définie sur Authenication mutuelle sur le serveur, je dois remplir une demande de modification pour ajuster les paramètres sur le serveur car il est dans l'environnement de production –

+0

J'ai dû définir le paramètre de communication MSDTC Transaction Manager de "Mutual Authentification requise "à" Aucune authentification requise "... merci pour l'info. –

+0

Où/comment avez-vous fait ce changement? –

0

Quelle est la durée de ce processus? Si vous atteignez votre délai d'expiration (improbable avec un délai d'attente de 40 minutes, mais toujours possible), vous pouvez recevoir ce message d'erreur.

Sinon, recevez-vous l'exception? Que se passe-t-il avant que l'exception soit levée?

+0

Je traite seulement environ 6500 enregistrements, donc je ne suis certainement pas en train d'atteindre mon seuil de timeout. C'est la seule exception que je reçois quand j'essaie de lancer le processus. –

+0

Je suppose que Mitch Wheat pourrait être sur la bonne voie, alors ... –

+0

Pour essayer sa solution, je dois obtenir la permission de faire le changement le serveur. –

Questions connexes