TransactionScope не откатывается внутри метода службы wcf, откатывается при прямом вызове

Я столкнулся с проблемой, которая уже пару дней сводит меня с ума, надеюсь, кто-нибудь сможет мне помочь. Вот он;

Я использую EF4 с базой данных oracle, используя dotConnect для oracle от devart в качестве провайдера. У меня есть метод службы wcf, который вызывает метод DeleteCabinet ниже;

public void DeleteCabinet(string pRID)
{
    using(TransactionScope tranScope = new TransactionScope())
    {
        DBUtils.DeleteCabinetAndShelves(pRecordId);

        //throw exception to test record not deleted
        throw new Exception("xxx something has happened test xxx");

        tranScope.Complete();
    }
}

DBUtils.DeleteCabinetAndShelves выглядит так, как показано ниже;

public void DeleteCabinetAndShelves(string pRecordId)
{
    using(var context = new EdrmEntities())
    {
        var cabinet = context.Cabinets.Include("Shelves").Single(p => p.RID == pCabinetRID);

        //mark all cabinet shelves for deletion
        if (cabinet.Shelves != null)
        {
            foreach (var tempShelf in cabinet.Shelves.ToList())
            {
                context.DeleteObject(tempShelf);
            }
        }

        //mark cabinet for deletion
        context.DeleteObject(cabinet);

        //save 
        context.SaveChanges();
    }
}

когда я вызываю DeleteCabinet из своего тестового проекта, не вызовом wcf, а прямым вызовом метода, он работает нормально. Выдает исключение и транзакция откатывается. Таким образом, никакая запись не удаляется из БД, как и ожидалось.

Проблема в том, что когда я вызываю сервисный метод (который вызывает DeleteCabinet) из клиента, возникает исключение, но запись удаляется из БД. Транзакция не откатывается!

похоже, что вызов метода wcf не откатывает транзакцию, но это кажется безумием (по крайней мере мне), кто-нибудь знает причину, по которой это может происходить?

Заранее спасибо

7
задан rayback2 6 March 2012 в 08:14
поделиться