更改事务管理类timeout不会影响SqlTransaction和TransactionScope类
本文关键字:SqlTransaction 影响 TransactionScope 事务管理 timeout | 更新日期: 2023-09-27 18:06:40
我正在使用覆盖机器的反射设置超时。配置事务时间(因为我们不能使用配置文件覆盖事务超时)。假设当前超时时间为5秒。
现在我在SqlTransaction范围内,我在10秒内将应用程序置于睡眠状态,但仍然不会抛出超时异常。与TransactionScope类相同。
请帮忙解释SqlTransaction/TransactionScope和TransactionManager之间的关系
与其重写,不如在代码中设置它:
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.
}