我在特定端点中有几个消息处理程序,它们针对 SQL Azure 数据库执行工作(目前仍在使用本地 SQL 2012 实例)。我有一个发布 2 个事件的命令处理程序,分别称为 X 和 Y。在同一个端点中,我有一个 X 的订阅者和一个 Y 的订阅者。这两个订阅者在内部使用相同的数据访问组件,称为 Z。注入是基于每次调用配置的,而不是共享的。
组件 Z 在幕后使用 Entity Framework 6。我遇到的问题是,仅打开数据库就会引发 SqlException 并抱怨 MSDTC 升级。
我暂时将处理程序包装在 TransactionScope.Suppress 中,这已经停止了错误,但我相信我错过了一些更基本的东西。
将端点配置为非事务性是否很简单?我原以为这会起作用,因为我已经配置为使用 Azure 服务总线作为传输机制。如果我这样做,如果在消息处理程序中引发异常,NServiceBus 仍会重试吗?(直到 SLR 限制——不是问题的一部分,我也理解幂等性问题)。