J'essaie d'envoyer un simple message, mais il semble qu'il soit automatiquement signalé comme n'ayant pas la portée d'une transaction ( comportement ). Le point final utilise le transport SQL (3.0.1) et NSB 6.1.2, le transport SQL fonctionne en mode transactionnel par défaut (TransactionScope).
Pour autant que je sache, aucune action spécifique n'a été entreprise pour cela, la seule chose que je peux imaginer est que la chaîne de connexion est partagée avec Dapper qui a exécuté quelques requêtes attendues vers la base de données également.
var data = await Provider.GetSomeRandomData(message.DataId);
bool synced = false;
await context.Reply(new RandomMessage());
Si le point d'extrémité est configuré à l'aide de TransportTransactionMode.SendsAtomicWithReceive
rien n'est enregistré, lorsque TransportTransactionMode.TransactionScope
est activée, l'enregistrement se produit (et, bien entendu, l'effet réel est probablement perdu).
Idéalement, le fournisseur utiliserait (d'une manière ou d'une autre) la même transaction que NServiceBus, bien que pour l'interrogation des données, il devrait s'affranchir de ce contexte de transaction, interroger la base de données sans interrompre la transaction NServiceBus (si c'est réellement le problème), de sorte que les écritures soient toujours transactées.