Verwenden von NTFS für Transaktionen
Transaktive Dateihandles
Transaktions-NTFS (TxF) bindet ein Dateihand handle an eine Transaktion. Bei Vorgängen, die für ein Handle funktionieren (z. B. die Funktionen ReadFile und WriteFile), ändert sich der tatsächliche API-Funktionsaufruf nicht. Für Dateivorgänge, die einen Namen haben, gibt es explizite transaktive Funktionen für diese Vorgänge. Rufen Sie beispielsweise anstelle von CreateFile den Aufruf von CreateFileTransacted auf. Dadurch wird ein transaktives Dateihandl erstellt, das dann für alle Dateivorgänge verwendet werden kann, die ein Handle erfordern. Alle nachfolgenden Vorgänge, die dieses Handle verwenden, sind transaktive Vorgänge.
Grundlegende TxF-Verwendung
Die folgende Reihe von Schritten stellt die grundlegendste Verwendung für TxF dar. Komplexere Szenarien werden auch nach Dem Ermessen des Anwendungsdesigners unterstützt.
- Erstellen Sie eine Transaktion, indem Sie die KTM-Funktion CreateTransaction aufrufen oder die IKernelTransaction-Schnittstelle des Distributed Transaction Coordinator (DTC) verwenden.
- Rufen Sie transaktive Dateihand handle(s) ab, indem Sie CreateFileTransacted aufrufen.
- Ändern Sie die Datei(en) nach Bedarf mithilfe der Transaktionsdateihand handle(s).
- Schließen Sie alle Transaktionsdateihandles, die der in Schritt 1 erstellten Transaktion zugeordnet sind.
- Commit oder Abbruch der Transaktion durch Aufrufen der entsprechenden KTM- oder DTC-Funktion.
Wichtige Punkte des TxF-Programmiermodells
Das TxF-Programmiermodell verfügt über die folgenden wichtigen Punkte, die Sie beim Entwickeln einer TxF-Anwendung berücksichtigen sollten:
- Es wird dringend empfohlen, dass eine Anwendung alle Transaktionsdateihandles schließt, bevor ein Commit oder Roll back für eine Transaktion ausgeführt wird. Das System macht alle transaktiven Handles ungültig, wenn eine Transaktion beendet wird. Jeder Vorgang, mit Ausnahme von close, der nach Dem Ende der Transaktion für ein transaktives Handle ausgeführt wird, gibt den folgenden Fehler zurück: ERROR HANDLE NO LONGER _ _ _ _ VALID.
- Eine Datei wird als Speichereinheit angezeigt. Teilupdates und vollständige Dateiüberschreibungen werden unterstützt. Mehrere Transaktionen können dieselbe Datei nicht gleichzeitig ändern.
- Speicherzuordnungs-E/A ist transparent und konsistent mit der regulären Datei-E/A. Eine Anwendung muss einen geöffneten Abschnitt leeren und schließen, bevor ein Commit für eine Transaktion ausgeführt wird. Wenn dies nicht der Fall ist, kann dies zu Teiländerungen an der zugeordneten Datei innerhalb der Transaktion führen. Ein Rollback schlägt fehl, wenn dies nicht erfolgt ist.
Häufige Programmierfehler
Die folgenden häufigen Fehler können beim Entwickeln von Transaktionsanwendungen auftreten:
- Verwenden eines Dateihandpunkts nach Abschluss einer Transaktion.
- Fehler beim Schließen von Handles für gelöschte Dateien und Verzeichnisse vor dem Committen einer Transaktion. Dies verhindert, dass die Löschvorgänge ausgeführt werden. Dieses Ereignis muss auftreten, bevor der Commit ausgeführt wird, damit der Löschvorgang als Teil der Transaktion betrachtet wird. Dies liegt daran, dass das System eine Datei erst dann löscht, wenn das letzte Handle geschlossen wird, selbst wenn der Vorgang nicht im Rahmen des Windows-Datei-E/A-Subsystems durchgeführt wird.
- Fehler beim Berücksichtigen von vom System initiierten Transaktionsrollbacks, die jederzeit ausgeführt werden können; Beispielsweise wird für eine Transaktion ein Rollback ausgeführt, wenn die Systemressourcen erschöpft sind.