Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Rebus Eventhandler中的嵌套TransactionScope_.net_Transactionscope_Rebus - Fatal编程技术网

.net Rebus Eventhandler中的嵌套TransactionScope

.net Rebus Eventhandler中的嵌套TransactionScope,.net,transactionscope,rebus,.net,Transactionscope,Rebus,根据这一点,Rebus不支持DTC:但根据这一点,Rebus使用TransactionScope。我猜这意味着总是使用轻量级事务,它不能跨越多个机器或连接 在我的例子中,我需要一个EventHandler,它首先向Firebird写入内容,然后再向RavenDB写入内容。Firebird和RavenDB都能够参与分布式事务。但它们在Rebus创建的TransactionScope中使用 我是否必须在EventHandler中创建一个新的嵌套TransactionScope,其中包含“Requir

根据这一点,Rebus不支持DTC:但根据这一点,Rebus使用TransactionScope。我猜这意味着总是使用轻量级事务,它不能跨越多个机器或连接

在我的例子中,我需要一个EventHandler,它首先向Firebird写入内容,然后再向RavenDB写入内容。Firebird和RavenDB都能够参与分布式事务。但它们在Rebus创建的TransactionScope中使用

我是否必须在EventHandler中创建一个新的嵌套TransactionScope,其中包含“Require new”,以便Firebird和RavenDB通过DTC一起提交。或者我必须为Rebus执行DTC才能使其工作

另一种选择是,我可能只需要按照Rebus wiki中的建议,使每个write幂等元


我想这个问题比关于Rebus的问题更一般。这实际上是关于TransactionScope的行为以及在某些连接允许而某些连接不允许时对DTC的升级。

我想你是对的,问题更多的是关于
TransactionScope
如何工作,以及Firebird和RavenDB能够在多大程度上参与环境事务

默认情况下,Rebus不会(与您发布此问题时wiki所述相反)处理事务范围内的消息

但是,它可以启用-请查看有关如何启用它的信息


我建议您要么将数据库更新设为幂等,要么将写操作分为两个单独的步骤,由两个单独的处理程序执行。

谢谢。:)我不知道为什么它会有助于分成两个处理程序?如果我按照您更新的Wiki中的说明启用TransactionScope,我假设Rebus仍然不使用DTC?然后我仍然有一个问题,对数据库的写入和MSMQ的弹出不会发生在同一个事务中。这意味着写操作必须是幂等的,无论我是否将它们拆分为两个处理程序。我说的对吗?如果我使用你在更新的wiki页面上提到的HandleMessageInsideTransactionScope。Rebus是否会升级以使用DTC?如果不是,您是如何阻止这种情况发生的:)据我所知,TransactionScope在没有其他选项时会升级到DTC。我猜它会升级,因为这就是愚蠢的事务范围的工作原理-但我相信一些聪明的用法,例如
新事务范围(TransactionScopeOptions.Suppress)
(如果我没记错的话),可以允许您创建另一个不会登记在Rebus事务范围中的事务范围。。。。但是如果你不想这样,为什么要首先启用自动事务作用域?我确实希望它升级-虽然我喜欢你使用幂等的想法,但我担心在我们的情况下它会太复杂。只是你在这里说REBS不使用DTC。所以我想知道你是否在TransactionScope上使用了一些秘密的魔法酱来阻止这种情况发生,但你(幸运的)没有。