TransactionsCope: MSDTC Eskalation Inkonsistenzen über Maschinen
Unser Projekt verwendet TransactionsCope für einen zuverlässigen Datenzugriff, aber wir haben inkonsistentes Verhalten aufgetreten. Einige Entwickler arbeiten nahtlos ohne MSDTC, während andere den Fehler "MSDTC auf [Server] nicht verfügbar" erhalten. In dieser Untersuchung wird untersucht, warum Transactionscope in einigen Maschinen, aber nicht in anderen Maschinen zu MSDTC eskaliert.
TransactionsCope vermeidet idealerweise MSDTC auf Client -Maschinen. Einige Szenarien können jedoch die DTC -Eskalation auslösen:
enthält der Code verschachtelte Verbindungsöffnungen, was der Behauptung einer einzelnen offenen Verbindung widerspricht. Diese verschachtelte Verbindung ist ein starker Verdächtiger für das Eskalationsproblem bei betroffenen Maschinen.
SQL Server -Version spielt eine entscheidende Rolle. SQL Server 2008 verbesserte die Transaktionsbehandlung und ermöglicht mehrere Verbindungen innerhalb eines TransaktionenScope (zu unterschiedlichen Zeiten geöffnet) ohne Eskalation. SQL Server 2005 fehlt jedoch diese Fähigkeit und eskaliert mit einer zweiten Verbindung zu DTC.
entscheidend verwenden Entwickler ohne Eskalationsprobleme SQL Server 2008, während diese Begegnungen mit Fehlern SQL Server 2005 verwenden. Dies bestätigt die vermutete Korrelation zwischen SQL Server -Version und MSDTC -Eskalation.
Für SQL Server 2005 ist eine einzelne, langlebige globale Verbindung erforderlich, damit TransactionsCope korrekt funktioniert. Dies steht im Widerspruch zu Best Practices (Verbindungen nur dann öffnen und sie umgehend schließen). Die Verwendung von TransactionsCope mit SQL Server 2005 ist möglicherweise nicht optimal, es sei denn, der Leistungsaufwand einer anhaltenden Verbindung ist akzeptabel.
Das obige ist der detaillierte Inhalt vonWarum eskaliert mein TransactionScope auf einigen Computern zu MSDTC, auf anderen jedoch nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!