У нас есть обработчик, который выполняет как предполагается, когда он получил сообщение. В этом процессе есть несколько шагов, и каждый последовательный создает свой собственный новый контекст, как показано ниже.Как предотвратить NServiceBus от отката транзакции или ее частей?
public void Handle(SomeMessage message)
{
...
try
{
...
using(DataContext context = new DataContext()) { ... }
...
using(DataContext context = new DataContext()) { ... }
...
}
catch (Exception exception)
{
...
using(DataContext context = new DataContext()) { ... }
...
}
}
Однако порой исключение бросается и попадает в него. Текущая транзакция откатывается (и поскольку она явно не реализована мной, я предполагаю, не будучи абсолютно уверенным, что это выполняется самим NServiceBus, потому что все результаты, записанные в БД, исчезают, в том числе в catch заявление).
На данный момент я разрешаю это, записывая файл, когда что-то происходит ужасно, но я бы хотел, чтобы это было сохранено в БД.
Итак, в конечном счете, я хотел бы предотвратить, что последняя операция, одна в catch заявление, откат. Может ли это сделать, и если да, то как?
Вы сказали, что как код, который вы отправили, не принадлежит вам? – Hopeless
@Hopeless Не уверен, что вы имеете в виду. Код не является моим юридическим лицом, потому что он принадлежит компании, над которой я работаю. Но это мое в том смысле, что я это написал. (Ну, команда больше, чем я, конечно, но эта конкретная часть - это в основном я.) Неужели я не понимаю ваш вопрос? Я не настраивал автобус (и тот парень, который давно ушел). –
Вы имеете в виду, что «последняя операция» - это то, что сделано в 'using (DataContext context = new DataContext()) {...}' (внутри catch) или *** все *** внутри catch? Я имею в виду, что я не понимаю, что вы на самом деле хотите предотвратить (последнее предложение). – Hopeless