我正在编写NServiceBus解决方案并尝试使用DBSubcriptionStorage。这使用NHibernate进行数据访问,我得到以下异常:
合作伙伴事务管理器已禁用其对远程/网络事务的支持
我可以启用MSDTC,但我的问题是:此要求来自何处,我可以将其删除吗?
我不熟悉NHibernate,我不知道它是否需要MSDTC或NServiceBus是否需要。 NServiceBus订阅数据库中只有一个平面表,在这种情况下我几乎看不到MSDTC的使用。
我可以删除MSDTC要求吗?我是否必须为此目的编写自己的订阅持久层?
由于
答案 0 :(得分:4)
MSDTC是一个很棒的小动物,但可能非常阴险。
首先,我建议如果您知道自己不希望成为分布式事务的一部分,那么请在开发服务器上将其关闭。您不希望自动升级到DEV中的分布式事务,只是为了发现它会破坏您的实际性能或在生产中不起作用。
话虽如此,答案是像NHibernate这样的ORM没有,但如果满足其中一个条件,就很有可能让MSDTC参与其中:
如果满足这些条件中的任何条件(当然还有其他一些我已经忘记的情况),您的交易将自动升级到分布式交易,并且MSDTC必然会参与其中。这意味着MSDTC不仅必须为您的盒子工作和配置,还必须为所有想要参与您的交易的盒子配置它。在简单的SQL服务方案中,这意味着您的应用服务器和SQL Server都需要运行它并为分布式事务配置。
我不熟悉NServiceBus,但我倾向于认为它具有各种功能,可以在事务上将消息放在队列上。