Heim > Backend-Entwicklung > C++ > Warum eskaliert mein TransactionScope auf einigen Computern zu MSDTC, auf anderen jedoch nicht?

Warum eskaliert mein TransactionScope auf einigen Computern zu MSDTC, auf anderen jedoch nicht?

Mary-Kate Olsen
Freigeben: 2025-01-26 18:21:09
Original
934 Leute haben es durchsucht

Why Does My TransactionScope Escalate to MSDTC on Some Machines But Not Others?

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:

  • Mehrere dauerhafte Ressourcen ohne Einzelphasen-Benachrichtigungen (ausgeschlossen).
  • Mehrere Verbindungen zurselben Datenbank (durch Codeüberprüfung ausgeschlossen).
  • Cross-Application-Domäne oder Prozesstransaktionsmarschhaling (ausgeschlossen).

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage