TransactionScope クラス (System.Transactions)
TransactionScopeはコンストラクタでタイムアウトする時間を指定することができます。
引数にタイムアウトする時間を指定しない場合は既定値が使用され、
設定ファイルを変更しない限り、その既定値は 1分 となります。
以下のコードで上記を確認する事が可能です。
Console.WriteLine(TransactionManager.DefaultTimeout); Console.ReadLine();
設定ファイルへ以下を追加し
再度TransactionManager.DefaultTimeoutを確認します。(抜粋)
<configuration> <system.transactions> <defaultSettings timeout="00:04:12"/> </system.transactions> </configuration>
設定が反映され 00:04:12 として表示されました。
以前に記事を書いた(TransactionScopeでタイムアウトするまでの最大許容時間 - ひっそりと生きるプログラマのブログ) と異なり、app.config / web.config での設定も可能です。
また、 DefaultTimeout は必ず 0 以上、MaximumTimeout以下で無ければなりません。
0 より小さい値を指定すると例外が発生します。
MaximumTimeout より大きい値を指定すると MaximumTimeout として扱われます。*1
私はよく、
using (var scope = new TransactionScope(TransactionScopeOption.Required))
と実装するので上記の設定は重宝します。*2
と、今日のところは(時間も遅いので)ここまで。
機会があれば、DefaultSettingsSection.DistributedTransactionManagerName プロパティ (System.Transactions.Configuration)についても何かしら記事をかくかもです。