Как получить подробную информацию об ошибке при прерывании транзакции

#c# #transactions

#c# #транзакции

Вопрос:

Я использую System.Transanction и TransanctionCompleted событие для обнаружения прерванных транзакций.

Как мне узнать, почему произошел сбой? Есть ли способ обнаружить детали ошибки?

Ответ №1:

Вы можете перехватить систему.Транзакции.Исключение TransactionException для вашего метода транзакции

 try
{
    //Create the transaction scope
    using (TransactionScope scope = new TransactionScope())
    {
        //Register for the transaction completed event for the current transaction
        Transaction.Current.TransactionCompleted  = new TransactionCompletedEventHandler(Current_TransactionCompleted);
        // proces the transaction
    }

}
catch (System.Transactions.TransactionAbortedException ex)
{
    Console.WriteLine(ex);
}
catch (System.Transactions.TransactionException ex)
{
    Console.WriteLine(ex);
}
catch
{
    Console.WriteLine("Cannot complete transaction");
    throw;
}
  

Обработчик событий завершения транзакции

 static void Current_TransactionCompleted(object sender, TransactionEventArgs e)
{
    Console.WriteLine("A transaction has completed:");
    Console.WriteLine("ID:             {0}", e.Transaction.TransactionInformation.LocalIdentifier);
    Console.WriteLine("Distributed ID: {0}", e.Transaction.TransactionInformation.DistributedIdentifier);
    Console.WriteLine("Status:         {0}", e.Transaction.TransactionInformation.Status);
    Console.WriteLine("IsolationLevel: {0}", e.Transaction.IsolationLevel);
}
  

Комментарии:

1. Спасибо, я имел в виду получить сведения об ошибке внутри события завершения транзакции, поскольку у меня есть доступ только к транзакции, но не мой код определяет, следует ли совершать / прерывать транзакцию или нет. Еще раз спасибо.

2. вы должны сделать это при вызове метода TransactionScope.