System.Transactions 有2個超時屬性(timeout 與 maxTimeout),可以通過配置文件來進行設置。
1. timeout
System.Transactions 默認的timeout值為1分鍾,可以通過app.config/web.config/machine.config來進行設置(對於應用中具體的事務還可以通過調用具體對象TransactionScope或CommittableTransaction的構造函數進行設置)。以下配置樣例代碼將其設置為30秒:
<configuration> <system.transactions> <defaultSettings timeout="00:00:30" /> </system.transactions> </configuration>
2. maximum transaction timeout
System.Transactions此外還有一個屬性: maximum transaction timeout,該屬性主要是系統管理員用於限制事務超時,其默認值為10分鍾,並且不可在代碼中覆蓋設置。如果在配置文件或者代碼中所設置的超時值均已超出該值,則以該值為准。maximum transaction timeout只能在machine.config文件中進行配置,以下配置樣例代碼將其設置為30分鍾:
<configuration> <system.transactions> <machineSettings maxTimeout="00:30:00" /> </system.transactions> </configuration>
綜上所述,即使在應用的配置文件或代碼中將timeout設置為0,試圖將事務超時時間設置為無限長也是無效的,整個事務的實際超時時間還是為machineSetting的maxTimeout值所限制。
注:代碼中設置非默認時這樣寫:
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 3, 0)))
TransactionScopeOption.Required為默認,主要為后面的時間參數
