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

时间:2014-06-04 21:54:38

标签: c# sql-server

我正在使用反射设置超时,该反映覆盖了machine.config事务时间(因为我们无法使用配置文件覆盖事务超时).let说当前超时是5秒。

现在我在SqlTransaction范围内,我将应用程序在10秒钟内暂停,但它仍然不会抛出超时异常.Same是使用TransactionScope类。

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

2 个答案:

答案 0 :(得分:1)

为什么不在代码中设置它而不是覆盖:

using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { Timeout = new TimeSpan(0,0,5) }))
{
    // code
}

答案 1 :(得分:0)

        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.
        }