我正在使用反射设置超时,该反映覆盖了machine.config事务时间(因为我们无法使用配置文件覆盖事务超时).let说当前超时是5秒。
现在我在SqlTransaction范围内,我将应用程序在10秒钟内暂停,但它仍然不会抛出超时异常.Same是使用TransactionScope类。
请帮助解释SqlTransaction / TransactionScope和TransactionManager之间的关系。
答案 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.
}