消息队列的TransactionScope问题

时间:2010-02-22 17:55:13

标签: c# transactions msmq transactionscope

我正面临下一个问题。我有一段代码如下:

DoSomething(){
  using (TransactionScope scope = new TransactionScope())
    {
      InsertSomething();
      InsertSomethingElse();
      InsertYetAnotherThing();
      ProcessDataRelatedWithThePreviousInserts();
      scope.Complete()
    }
}

在ProcessDataRelatedWithThePreviousInserts中,我检查条件,如果需要,其余的工作流将重定向到其他服务器中的Message Queue。在另一台服务器中,我恢复了消息,并继续工作流程(基本上,进行一些与DoSomething方法相关的插入)。

这是理论上的,因为如果我在DoSomething方法中删除TransactionScope,我只能设法做到这一点。有没有办法完成我想做的事情,或者我需要改变交易的处理方式?

1 个答案:

答案 0 :(得分:0)

你有没有试过

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    // ...
    using (TransactionScope innerscope = new TransactionScope(TransactionScopeOption.Supress)
    {
        ProcessDataRelatedWithThePreviousInserts();
    }
    scope.Complete();
}

显式禁止调用 ProcessData相关WithThePreviousInserts()的外部事务。