Если в моем MessageHandler возникает исключение, я хочу записать сведения об исключении в свою базу данных.
Как мне это сделать?
Очевидно, что я не могу просто перехватить исключение, записать в базу данных и перебросить его, поскольку NSB откатывает все изменения. (IsTransactional имеет значение true)
Я попытался добавить функцию ведения журнала в отдельный обработчик, который я вызвал с помощью SendLocal, если произошло исключение, но это не работает:
public void Handle(MessageItem message)
{
try
{
DoWork();
}
catch(Exception exc)
{
Bus.SendLocal(new ExceptionMessage(exc.Message));
throw;
}
}
Я также пытался использовать Log4Net с пользовательским приложением, но это также откатывалось.
Configure.With()
.Log4Net<DatabaseAppender>(a => a.Log = "Log")
Appender:
public class DatabaseAppender : log4net.Appender.AppenderSkeleton
{
public string Log { get; set; }
protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
if (loggingEvent.ExceptionObject != null)
WriteToDatabase(loggingEvent.ExceptionObject);
}
}
Есть ли способ регистрировать необработанные исключения в обработчике сообщений, когда IsTransactional имеет значение true?
Заранее спасибо.