Лучший метод, который я нашел для захвата это наиболее эффективно/правильно выглядит следующим образом:
Внутри TransactionScope используя заявление, и перед вызовом объема/Complete().
//Register for the transaction completed event for the current transaction
Transaction.Current.TransactionCompleted += new TransactionCompletedEventHandler(Current_TransactionCompleted);
Затем создайте функцию обработчика событий следующим образом:
/// <summary>
/// Handles the TransactionCompleted event of the Current control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Transactions.TransactionEventArgs"/> instance containing the event data.</param>
static void Current_TransactionCompleted(object sender, TransactionEventArgs e)
{
if (e.Transaction.TransactionInformation.Status == TransactionStatus.Committed)
{
/// Yay it's committed code goes here!
}
}
Цитирует MSDN
«Вы можете зарегистрироваться на это событие, вместо использования летучей вербовки для получения информации результата по сделкам. Параметр, переданный делегату TransactionCompletedEventHandler, является экземпляром транзакции. Затем вы можете запросить свойство TransactionInformation конкретного экземпляра, чтобы получить экземпляр TransactionInformation, свойство Status которого содержит статус транзакции с обязательным или отмененным значением. "
Проводка некоторых примеров текущей кодовой базы поможет. – Oded