0

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

查看我何时通过显式回滚来回滚事务:

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”后面还有其他“receives”,保证工作流不会进入“完成”状态……

我确定我的事务正在流入工作流程,因为在工作流程中我有一个活动返回我的事务 ID(当然与应用程序上的 ID 匹配)

谁能告诉发生了什么?我错过了什么?

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

4

1 回答 1

0

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

于 2013-03-05T04:45:36.200 回答