Für Transaktionen im .NET Framework (siehe System.Transactions.Transaction
) kann ein Timeout gesetzt werden. Programmatisch ist dies über die TransactionOptions
und der dort angebotenen Eigenschaft Timeout
möglich.
Allerdings ist auch eine Konfiguration des Timeouts möglich. Zu diesem Thema finden sich aber unterschiedliche Aussagen im Internet.
Das Default-Timeout einer Transaction liegt bei 10 Minuten. Kann die Transaktion innerhalb dieser Zeit nicht abgeschlossen werden, erfolgt ein Abbruch derselben.
Default-Timeout verändern
Das Default-Timeout kann für jede Anwendung in der app.config
verändert werden. Dazu ist folgender Eintrag notwendig:
<system.transactions>
<defaultSettings timeout="00:15:00"/>
</system.transactions>
Diese Einstellung erhöht das Default-Timeout auf 15 Minuten.
Wird ein Timeout programmatisch gesetzt, wird das konfigurierte Timeout überschrieben.
Es kann zwar ein beliebiges Default-Timeout gesetzt werden, allerdings gibt es auch ein maximales Timeout.
Maximales Transaction Timeout konfigurieren
An vielen Stellen wird die Konfiguration dieses Timeouts über die app.config
gezeigt. Dies ist nicht richtig. Das maximale Timeout muss über die machine.config
gesetzt werden. Diese liegt sowohl für 32bit als auch für 64bit Kompilate vor, daher rate ich zur Anpassung beider Dateien. Zu finden sind sie hier:
%windir%\Microsoft.NET\Framework\v4.0.30319\config\machine.config
%windir%\Microsoft.NET\Framework64\v4.0.30319\config\machine.config
Die neue Einstellung kann folgendermaßen gesetzt werden:
<system.transactions>
<machineSettings maxTimeout="00:20:00"/>
</system.transactions>
Zu beachten ist, dass diese Einstellung die allerletzte innerhalb der machine.config sein muss (direkt vor ), da es sonst zu Problemen kommt und die Einstellung nicht verwendet wird.
Viel Erfolg!