Проблема в объеме транзакции внутри WCF - PullRequest
1 голос
/ 17 июня 2011

В моем проекте DAL является службой WCF .Net4.0. используя базу данных оракула 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 Ответ

1 голос
/ 17 июня 2011

Я не вижу причин, почему это не сработало бы так, как вы ожидаете, как у вас там выложен код.

Однако, если вы используете WCF, вы можете рассмотреть возможность использования потока транзакций, встроенного в WCF. Таким образом, вы можете заключить весь вызов WCF в одну транзакцию, не создавая и не управляя TransactionScopes вручную. Поток транзакций WCF может быть настроен так, чтобы требовать транзакцию на стороне службы, поэтому WCF начнет транзакцию для вас, если клиент не пропустит ее. Таким образом, вам вообще не придется редактировать свой клиент. http://msdn.microsoft.com/en-us/library/ms751413.aspx

...