pro Reflektor Die Grundregeln für das Festlegen eines Transaktionszeitlimits mit den Konstruktoren TransactionScope
lauten wie folgt:
Die DefaultTimeOut von der ersten Regel bestimmt wird, unter dem erfüllt ist:
- wenn der Konstruktor einen
TimeSpan
Parameter hat, die DefaultTimeout der, dass Parameter
- ist, wenn der Konstruktor ein
TransactionOption
Parameter hat, die DefaultTimeout ist transactionOption.TimeOut
- Wenn der Konstruktor über einen
TransactionScopeOption
-Parameter verfügt, ist DefaultTimeout scopeOption.TimeOut
- Wenn der Konstruktor keinen Timeout-Parameter hat, ist DefaultTimeout der in der App- oder Webkonfigurationsdatei angegebene Wert.
- andernfalls ist DefaultTimeOut 1 Minute.
Die maxTimeout ist 10 Minuten, wenn nicht ein anderer Wert in dem machine.config angegeben ist.
Das effektive Timeout für die Transaktion ist kleiner als MaxTimeOut und DefaultTimeOut, die größer als Null ist. Wenn sowohl MaxTimeOut als auch DefaultTimeOut Null sind, ist das effektive Timeout die Anzahl der Ticks, die durch long.MaxValue
(das Unendliche) dargestellt werden. Wenn die TransactionScope
-Instanz keine neue Transaktion erstellt, weil entweder eine Transaktion in ihren Konstruktor übergeben wird oder weil die Transaktionsbereichsoption dies nicht erfordert (z. aber ein timeOut
Parameter wird noch im Konstruktor übergeben, ein Timer wird gestartet. Nach Ablauf der Zeitüberschreitung wird die Methode TimeOut()
der zugrunde liegenden Transaktion aufgerufen. Die Eigenschaften DefaultTimeOut und MaxTimeOut werden in diesem Fall nicht verwendet.
Wenn die transactionScopeOption == TransactionScopeOption.Supress
, wird das Timeout ignoriert und hat keine Auswirkungen.
Es ist auch möglich, die maxTimeout in der App/Web-Konfigurationsdatei zu definieren, wenn der entsprechende Abschnitt in der machine.config außer Kraft gesetzt wird (beachten Sie die Werte der allowDefintion und allowExeDefinition Attribute):
<sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
<section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
<section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineToApplication" allowExeDefinition="MachineToApplication"/>
</sectionGroup>
für schnelle Referenz, hier ist der Transactionbauer:
public TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout, EnterpriseServicesInteropOption interopOption);
public TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions, EnterpriseServicesInteropOption interopOption);
public TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions);
public TransactionScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout);
public TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout);
public TransactionScope(TransactionScopeOption scopeOption);
In welcher Konfigurationsdatei haben Sie diesen Satz? In welchem Konfigurationsabschnitt? – PVitt
In App.confing direkt unter dem root. Auch in web.config, aber der obige Test war für app.config. –
MattH