Workflow Foundation和DTC事务回滚不当行为

时间:2013-03-04 21:49:04

标签: transactions workflow-foundation-4 transactionscope msdtc

我正在测试工作流基础4.5中的接收事务范围,我认为它有问题!

通过显式roolback查看我何时回滚交易:

using (TransactionScope s = new TransactionScope())
{
    using (ServiceReference1.ServiceClient cli = new ServiceReference1.ServiceClient())
    {
        Transaction t = Transaction.Current;                    
        cli.GetData(new ServiceReference1.GetData() { data = 10, ID = id });
        t.Rollback();                                        
    }
}

或在transactionScope中抛出异常:

using (TransactionScope s = new TransactionScope())
{
    using (ServiceReference1.ServiceClient cli = new ServiceReference1.ServiceClient())
    {
        cli.GetData(new ServiceReference1.GetData() { data = 10, ID = id });
        throw new Exception("Error!");
    }
}

我希望工作流程也可以回滚!换句话说,我希望接收“GetData”仍然有效!但这不会发生。工作流程已执行且GetData不再有效!

“GetData”之后还有其他“收到”以确保工作流程不会进入“已完成”状态...

我确信我的交易正在流入工作流程,因为在工作流程中,我有一个活动可以返回交易ID(当然与应用程序中的交易ID相匹配)

有人能说出发生了什么吗?我错过了什么?

进一步说明:
一切都在我的机器上运行(包括后备存储,在Sql Server 2012上) DTC已启用

1 个答案:

答案 0 :(得分:0)

工作流本身不是交易资源。因此,虽然您所做的任何数据库更新都可能会被回滚,但工作流本身的状态不会被重置。