Frage TransactionScope: Ist es besser geworden?


Als TransactionScope zum ersten Mal herauskam, stieß ich auf einige schwerwiegende Probleme, die zwischen meinem Dev-Rechner (XP) und unserem Datenbankserver (Windows Server 2003) zum Laufen brachten.

Als ich mehr darüber nachdachte, schien dies ein heikles und weit verbreitetes Problem zu sein, das in der Produktion zu Kopfschmerzen führen konnte. Daher entschied ich mich, Transaktionen auf diese Weise nicht zu handhaben (obwohl ich die Syntax sehr mag und wirklich wollte arbeiten).

Sind diese Probleme immer noch da oder ist dies sicher zu verwenden? Benutzt du das jetzt regelmäßig ohne Probleme?

Danke vielmals!

Hinweis: Es ist jetzt schon eine lange Zeit, aber ich denke, das Thema hatte etwas mit Distributed Transaction Coordinator zu tun. Ich habe lange damit herumgespielt und konnte es nie zum Laufen bringen.


5
2017-07-20 21:03


Ursprung


Antworten:


Rick Strahl hat einen großartigen Beitrag über Transaktionsumfang und LINQ to SQL Hier. Sein Kontext ist mehr LINQ to SQL, aber ich denke, dass es einige Prinzipien gibt, die zur Lösung Ihrer Frage beitragen können.

EDIT: Um Ihre Frage genauer zu beantworten, hier ist, was Strahl über TransactionScope zu sagen hat:

Traditionell war TransactionScope ein .NET-Wrapper um den Distributed Transaction Coordinator (DTC), aber seine Funktionalität hat sich etwas erweitert. Ein Problem ist, dass das DTC im Hinblick auf die Ressourcennutzung ziemlich teuer ist und erfordert, dass der DTC-Dienst tatsächlich auf der Maschine ausgeführt wird (ein weiterer Dienst, der bei einer Clientinstallation besonders störend ist).

Neuere Updates für TransactionScope und die SQL Server-Clienttreiber ermöglichen jedoch die Verwendung der TransactionScope-Klasse und die einfache Verwendung ohne DTC, solange Sie für eine einzelne Datenbank und mit einer einzigen konsistenten Verbindungszeichenfolge ausgeführt werden


8
2017-07-20 21:06



Ich verwende TransactionScope jetzt seit über einem Jahr ohne irgendwelche Probleme. Die Anwendung ist jedoch eine interne Anwendung mit einer sehr kleinen Anzahl von Benutzern. Außerdem befinden sich die Datenbank und die Anwendung auf demselben Server.

Hier finden Sie einige Informationen zu TransactionScope und wo Sie nach weiteren Informationen suchen können: Wenn Sie ein TransactionScope-Objekt erstellen, wird eine leichtgewichtige Transaktion gestartet. Solange Sie eine einzelne Verbindung / Ressource verwenden, die Transaktionen mit geringem Gewicht unterstützt, wird die Transaktion vom Ressourcenmanager verarbeitet, der so wenig Ressourcen wie möglich mit sehr guter Leistung verbraucht. Wenn Sie dem Transaktionsbereich eine zweite Verbindung / Ressource hinzufügen, wird der Transaktionsmanager automatisch zu einem OleTx-Transaktionsmanager heraufgestuft, der verteilte Transaktionen mithilfe der COM + -DTC-Technologien verarbeiten kann. Dies geschieht auch mit einer einzelnen Verbindung zu einem Ressourcenmanager, der keine leichtgewichtigen Transaktionen wie SQL Server 7/2000, Oracle und andere RDBMS unterstützt.

Hier sind zwei Ressourcen, die Ihnen helfen können:

"Microsoft Windows Server 2003 Service Pack 1 (SP1) und Microsoft Windows XP Service Pack 2 (SP2) enthalten viele sicherheitsrelevante Updates und Änderungen. Einige dieser Änderungen betreffen den Microsoft Distributed Transaction Coordinator (MSDTC) -Dienst." Neue Funktionalität im Distributed Transaction Coordinator-Dienst in Windows Server 2003 Service Pack 1 und Windows XP Service Pack 2

und

Juval Lowys Whitepaper zu System.Transactions: Einführung von System.Transactions in Microsoft .NET Framework, Version 2.0


1
2017-07-21 15:18



Es gibt immer noch Probleme mit TransactionScope. In meinem aktuellen Projekt laufen wir in unregelmäßigen Abständen in die beiden Ausnahmen "Nicht in einer verteilten Transaktion einbinden" und "TransactionInDoubtException". Beide Ausnahmen beziehen sich auf TransactionScope. Eine Problemumgehung für beide Ausnahmen besteht darin, eine einzelne Oracle-Verbindung zu verwenden (falls zutreffend). Lesen Sie dazu in: Vermeiden Sie unerwünschte Eskalationen in verteilten Transaktionen

Für Informationen zur Performance-Wirkung lesen Sie bitte meinen Beitrag: Leistungseinfluss mit TransactionScope


1
2018-02-04 18:58