2013-03-27 3 views
2

TimeoutException problems.TransactionScope TransactionAborted Exception - BeginCommit()?

Контекст: 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

Вы можете увеличить время ожидания в web.config. Кроме того, попробуйте увеличить размер пула. Иногда в длинных запросах увеличивается максимальный предел потока.

Смежные вопросы