In unserem aktuellen Projekt verwenden wir ADO.NET Entity Framework als Datenschicht für die Anwendung. Es gibt einige Aufgaben, die in einer Transaktion ausgeführt werden müssen, da in der Datenbank viel Arbeit erforderlich ist. Ich verwende eine TransactionScope, um diese Aufgaben zu umgeben.MSDTC Problem mit Transaktionen in ADO.NET Entity Framework
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
// Do something...
transactionScope.Complete();
}
Das Problem ist, sobald ich ein TransactionScope bin mit einer Ausnahme auftritt:
System.Data.EntityException: Der zugrunde liegende Anbieter auf Öffnen fehlgeschlagen. ---> System.Transactions.TransactionManagerCommunicationException: Die Kommunikation mit dem zugrunde liegenden Transaktionsmanager ist fehlgeschlagen. ---> System.Runtime.InteropServices.COMException (0x80004005): Fehler HRESULT E_FAIL wurde von einem Aufruf an eine COM-Komponente zurückgegeben.
Es scheint, dass dieser Fehler etwas mit dem MSDTC (Microsoft Distributed Transaction Coordinator) zu tun hat. Wenn ich die Sicherheitskonfiguration von MSDTC ändere, wird eine weitere Ausnahme ausgelöst:
System.Data.EntityException: Der zugrunde liegende Provider ist bei Open fehlgeschlagen. ---> System.Transactions.TransactionManagerCommunicationException: Netzwerkzugriff für Distributed Transaction Manager (MSDTC) wurde deaktiviert. Aktivieren Sie DTC für den Netzwerkzugriff in der Sicherheitskonfiguration für MSDTC mit dem Verwaltungsprogramm für Komponentendienste.
MSDTC ist jedoch konfiguriert, die TransactionScope wird einen Fehler verursachen. Weiß jemand, was hier falsch läuft?
Ich denke, Es verwendet in diesem Fall keine Transaktion, aber ich bin mir nicht sicher. –
Ja, diese Option zeigt an, dass sie nicht an der Transaktion teilnehmen soll. –
Ich bekomme den gleichen Fehler, aber es gibt keine Möglichkeit, das ist die beste Antwort. –