TimeoutException问题。
上下文:Visual Studio 2010
问题:我偶尔(每天运行一次,每小时运行一次)得到一个例外 我不明白。
这是一个例外:
Exception message : The transaction has aborted.
Exception Source : System.Transactions
Exception Trace : at System.Transactions.TransactionStateAborted.BeginCommit(InternalTransaction tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object asyncState)
at System.Transactions.CommittableTransaction.Commit()
at System.Transactions.TransactionScope.InternalDispose()
at System.Transactions.TransactionScope.Dispose()
at JDTranslation_K4_ReadEmails.Form1.ReadEmailDetails(EmailMessage emMessage, String strUserName, String strAccountName)
Exception Target : Void BeginCommit(System.Transactions.InternalTransaction, Boolean, System.AsyncCallback, System.Object)
异常通常发生在持续25-30分钟的事务之后。
我将我的交易设置为持续5个小时(见下文),所以我根本不明白为什么 它可以超时。
我有点担心:我知道有些数据已经提交给了 数据库 - 我可以相信它们都是? (通过验证几乎是不可能的 调查数据。)
程序(函数的一部分)看起来大致如下:
//INSTANTIATE THE TRANSACTION SCOPE
TransactionOptions option = new TransactionOptions();
//SET THE ISOLATION LEVEL AND THE TIMEOUT DURATION
option.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
option.Timeout = new TimeSpan(5, 0, 0);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, option))
{
try{
// do some select/update/insert/delete stuff on both connections,
// up to perhaps 3600 actions
// some of it happens in static functions declared elsewhere in the same class scope
} // this is the line mentioned in the Exception
}
我很乐意回答我的一些问题:
为什么会发生异常?
我可以相信所有数据都已提交,或者C#.NET中是否存在允许部分提交的真正错误?
我的代码是否正确,还是应该以不同方式组织以解决问题?
请帮助!
答案 0 :(得分:0)
您可以在web.config中增加超时时间。此外,尝试增加池大小。有时在长查询中会增加最大线程限制。