Von meinem Verständnis NServiceBus führt die Handle-Methode eines IMessageHandlers innerhalb einer Transaktion, wenn eine Ausnahme aus dieser Methode propagiert, dann NServiceBus wird sicherstellen, dass die Nachricht zurück auf die Message-Queue (bis X Menge von Zeiten vor Fehler-Warteschlange) usw. gesetzt wird. so haben wir eine atomare Operation sozusagen.
Nun, wenn ich innerhalb meiner NServiceBus Message Handle-Methode ich etwas wie dieses tun
using(var trans = session.BeginTransaction())
{
person.Age = 10;
session.Update<Person>(person);
trans.Commit()
}
using(var trans2 = session.BeginTransaction())
{
person.Age = 20;
session.Update<Person>(person);
// throw new ApplicationException("Oh no");
trans2.Commit()
}
Welche Auswirkungen hat dies auf den Umfang der Transaktion? Wird trans1 nun als verschachtelte Transaktion in Bezug auf ihre Beziehung zur Nservicebus-Transaktion gezählt, obwohl wir nichts getan haben, um sie miteinander zu verbinden? (Wenn nicht, wie würde man sich mit der Transaktion von NServiceBus verbinden?
Wenn ich den zweiten Block (trans2) betrachte und die throw-Anweisung entferne, wird die NServiceBus-Transaktion dann auch trans1 zurücksetzen? In grundlegenden Szenarien, sagen wir, ich dump die oben in eine Konsole app, dann trans1 ist unabhängig, Commit, gespült und wird nicht rollback. Ich versuche zu klären, was passiert jetzt wir sitzen in jemand anderes Transaktion wie NServiceBus?
Das oben genannte ist nur Beispielcode, im wouldnt arbeiten direkt mit Sitzung, mehr wie durch eine uow-Muster.