我正在测试工作流基础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已启用
答案 0 :(得分:0)
工作流本身不是交易资源。因此,虽然您所做的任何数据库更新都可能会被回滚,但工作流本身的状态不会被重置。