2009-04-23 7 views
3

Ich erhielt den folgenden Fehler, wenn ich versuchte, eine C# WinForms-Anwendung auf einem Windows Server 2003 Standard Edition SP1-Computer, der eine Verbindung zu einem SQL Server 2000, Konvertierung der Daten in der WinForms App und Einfügen der konvertierten in eine SQL Server 2005-Anwendung. Ich verbinde mich mit jeder Datenbank mit SSPI.HRESULT: 0x8004D00E mit TransactionScope - C#

Der Code wurde in einer Transaction Block enthält:

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(); 
    } 

Fehlermeldungen:

Ausnahme: Die Transaktion hat bereits implizit oder explizit begangen oder abgebrochen.

Innere Ausnahme: Die Transaktion wurde bereits implizit oder explizit gewesen festgeschrieben oder abgebrochen (Ausnahme von HRESULT: 0x8004d00e)

Jeder weiß, was könnte dieses Problem verursachen?

+0

Auf welcher Linie ist es die Ausnahme ausgelöst? Und warum fangen Sie die Ausnahme im Block ein? – shahkalpesh

+0

Ich verwende die App auf einem Remote-Server, daher kann ich die Zeilennummer nicht erfassen. Ich setze den try/catch-Block in die using-Anweisung, da dies der einzige Ort ist, an dem ich eine Verbindung herstelle und die Daten verarbeite. –

Antwort

4

Überprüfen Sie, ob der DTC auf dem Computer gestartet wurde, auf dem der Code ausgeführt wird. Da Sie im Transaktionsbereich zwei Verbindungen verwenden, wird die Transaktion in eine DTC-basierte Transaktion umgewandelt.

Überprüfen Sie auch, ob die Sicherheit korrekt konfiguriert ist (überprüfen Sie dies, indem Sie anonyme Teilnahme an der DTC-Transaktion zulassen), und dass Ihre Firewall den DTC durchlässt.

Schauen Sie sich dieses Forum FAQ: Distributed Transaction Coordinator(MSDTC) and Transaction FAQ

[Im Zusammenhang mit dieser Frage SO: Distributed Transaction Coordinator]

+0

DTC ist auf Gegenseitige Authentifizierung auf dem Server eingestellt, ich muss eine Änderungsanforderung ausfüllen, um die Einstellungen auf dem Server anzupassen, da es sich in der Produktionsumgebung befindet –

+0

Ich musste die MSDTC Transaction Manager Communication Einstellung von "Gegenseitig Authentifizierung erforderlich "bis" Keine Authentifizierung erforderlich "... danke für die Info. –

+0

Wo/wie haben Sie diese Änderung vorgenommen? –

0

Wie lange dauert dieser Prozess? Wenn Sie Ihr Timeout (unwahrscheinlich mit einem 40-Minuten-Timeout, aber immer noch möglich) treffen, könnten Sie diese Fehlermeldung erhalten.

Andernfalls erhalten Sie die Ausnahme? Was passiert, bevor die Ausnahme ausgelöst wird?

+0

Ich verarbeite nur etwa 6500 Datensätze, also treffe ich definitiv meine Zeitüberschreitungsschwelle nicht. Dies ist die einzige Ausnahme, die ich erhalte, wenn ich versuche, den Prozess auszuführen –

+0

Ich würde vermuten, Mitch Wheat könnte auf dem richtigen Weg sein, dann ... –

+0

Um seine Lösung zu versuchen, muss ich die Erlaubnis bekommen, die Änderung zu machen der Server. –