.net - 默认事务超时

标签 .net configuration transactions timeout

我曾经使用 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/

相关文章:

.net - 生成Excel文件错误

c# - 如何保留我的功能(对象/方法) 'lean and mean'

c# - 在 RESTful WCF 服务中访问调用者的域名

windows - Windows 上的 SQLite DB 像互斥锁一样锁定且无需轮询

database - 事务中的操作顺序重要吗?

php - MySQL事务超时多久

c# - 将 TypeConverter 直接绑定(bind)到枚举

node.js - 为什么 npm userconfig 没有被获取?

java - 将所有参数都放在 XML 文件中是否是优化的?

configuration - IntelliJ配置目录