我曾经使用 TransactionOptions.Timeout 设置事务超时,但为了便于维护,我决定使用配置方法:
<system.transactions>
<defaultSettings timeout="00:01:00" />
</system.transactions>
当然,在放入这个之后,我想测试它是否正常工作,因此将超时减少到 5 秒,然后运行一个比这个持续时间更长的测试 - 但事务似乎没有中止!如果我调整测试以将 TransactionOptions.Timeout 设置为 5 秒,测试将按预期工作
经过调查,我认为问题似乎与 TransactionOptions.Timeout 有关,即使我不再使用它。
我仍然需要使用 TransactionOptions 来设置 IsolationLevel,但我不再设置 Timeout 值,如果我在创建该对象后查看该对象,超时值为 00:00:00,相当于无穷大。这是否意味着我在配置文件中设置的值被忽略?
总结一下:
- 是否无法混合配置 设置和使用 交易选项
- 如果没有,有吗 任何提取配置设置的方法 在运行时,并使用它来设置 超时属性
- [编辑] 或设置默认隔离级别而不使用 TransactionOptions
最佳答案
您可以使用TransactionManager.DefaultTimeout
从配置中获取(经过验证的)默认超时。 .
TransactionOptions
是一个封装超时和隔离级别的结构体。当初始化struct时使用默认构造函数,它总是将结构成员初始化为其默认值:
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.Timeout == default(TimeSpan); // TimeSpan.Zero
transactionOptions.IsolationLevel == default(IsolationLevel); // IsolationLevel.Serializable
如果您想指定IsolationLevel
并使用默认超时:
new TransactionOptions()
{
IsolationLevel = IsolationLevel.Serializable, // Use whatever level you require
Timeout = TransactionManager.DefaultTimeout
};
关于.net - 默认事务超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348191/