如何防止NServiceBus中被抑制范围事务的意外标记?

时间:2017-02-08 12:07:32

标签: nservicebus

我试图发送一条简单的消息,但似乎它会自动被标记为没有事务范围(behavior)。 端点正在运行SQL传输(3.0.1)和NSB 6.1.2,SQL传输以默认事务模式(TransactionScope)运行。

据我所知,没有采取任何具体行动,我唯一能想到的是连接字符串与Dapper共享,Dapper也对数据库执行了几个等待的查询。 / p>

var data = await Provider.GetSomeRandomData(message.DataId);
bool synced = false;
await context.Reply(new RandomMessage());

如果使用TransportTransactionMode.SendsAtomicWithReceive配置端点,则不记录任何内容,启用TransportTransactionMode.TransactionScope时,会发生日志记录(当然也可能会丢失实际效果)。

理想情况下,提供程序将使用(某种方式)NServiceBus使用的相同事务,但是为了查询数据,它需要以某种方式突破此事务上下文,在不破坏NServiceBus事务的情况下查询数据库(如果这是实际上是问题),所以写入仍然会被处理。

1 个答案:

答案 0 :(得分:0)

您可以尝试添加.ConfigureAwait(false)

await context.Reply(new RandomMessage()) .ConfigureAwait(false);

请参阅this article for more details

这可以解决问题吗?