WCF内部的交易范围问题

时间:2011-06-17 13:37:07

标签: wcf transactions transactionscope

在我的项目中,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;
    }

}

1 个答案:

答案 0 :(得分:1)

我认为没有任何理由可以解释为什么你的代码就像预期的那样工作。

但是,如果您使用的是WCF,则可能需要考虑使用内置于WCF的事务流。您可以将整个WCF调用以这种方式包装到单个事务中,而无需手动创建和管理TransactionScope。可以将WCF事务流设置为要求服务端的事务,因此如果客户端未通过事务,WCF将为您启动事务。这样您就不必编辑客户端了。 http://msdn.microsoft.com/en-us/library/ms751413.aspx