更改事务管理类timeout不会影响SqlTransaction和TransactionScope类

本文关键字:SqlTransaction 影响 TransactionScope 事务管理 timeout | 更新日期: 2023-09-27 18:06:40

我正在使用覆盖机器的反射设置超时。配置事务时间(因为我们不能使用配置文件覆盖事务超时)。假设当前超时时间为5秒。

现在我在SqlTransaction范围内,我在10秒内将应用程序置于睡眠状态,但仍然不会抛出超时异常。与TransactionScope类相同。

请帮忙解释SqlTransaction/TransactionScope和TransactionManager之间的关系

更改事务管理类timeout不会影响SqlTransaction和TransactionScope类

与其重写,不如在代码中设置它:

using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { Timeout = new TimeSpan(0,0,5) }))
{
    // code
}
        try
        {
            Type transType = typeof (System.Transactions.TransactionManager);
            FieldInfo cachedMaxTimeOut = transType.GetField("_cachedMaxTimeout", BindingFlags.NonPublic | BindingFlags.Static);
            FieldInfo maximumTimeOut = transType.GetField("_maximumTimeout", BindingFlags.NonPublic | BindingFlags.Static);
            if (null != cachedMaxTimeOut)
            {
                cachedMaxTimeOut.SetValue(null, true);
            }
            if (null != maximumTimeOut)
            {
                maximumTimeOut.SetValue(null, timeout);
            }
        }
        catch(Exception ex)
        {
            //Exception handling or logging.
        }