在我的项目中,DAL是WCF服务.Net4.0。使用数据库oracle 11g。我在WCF(服务器端)中使用事务范围。 我必须在方法(操作合同)中调用多个存储过程,如果任何一个sp失败,我需要回滚已执行的sp。但回滚没有发生。我没有使用客户端事务流程。
我已放置示例代码
公共类服务:IService {
public bool Method1()
{
using (TransactionScope Scope1 = new TransactionScope())
{
Method2();
Method3();
Scope1.Complete();
}
return true;
}
public bool Method2()
{
using (TransactionScope Scope2 = new TransactionScope())
{
// Procedure call .....
Scope2.Complete();
}
return true;
}
public bool Method3()
{
using (TransactionScope Scope3 = new TransactionScope())
{
// Procedure call .....
Scope3.Complete();
}
return true;
}
}
答案 0 :(得分:1)
我认为没有任何理由可以解释为什么你的代码就像预期的那样工作。
但是,如果您使用的是WCF,则可能需要考虑使用内置于WCF的事务流。您可以将整个WCF调用以这种方式包装到单个事务中,而无需手动创建和管理TransactionScope。可以将WCF事务流设置为要求服务端的事务,因此如果客户端未通过事务,WCF将为您启动事务。这样您就不必编辑客户端了。 http://msdn.microsoft.com/en-us/library/ms751413.aspx