28 февр. 2009 г.

TransactionScope и ASP.NET

Вещи оказались совершенно несовместимые. При изучении TransactionScope выяснилось, что если в процессе обработки транзакции начинается еще одна транзакция в том же процессе (но например в соседнем потоке), то создается распределенная транзакция и дальше, учитывая что страниц будет открываться сразу и много - получается совершенная каша с фиксацией в непонятный момент времени. Кроме того чтобы это заработало нужно сначала помудрить с правилами разрешения и настройками сервера. Самое плохое, что сначала всё хорошо, проблемы начинаются через несколько минут работы сайта, потому сразу не понятно помогло найденное лекарство или нет. На данный момент пришел к выводу, что оно того не стоит - проще в начале страницы транзакцию запускать и в конце завершать без всяких оберток вручную.

2 комментария:

  1. Мне кажется, Вы не совсем правы. TransactionScope скорее завязан на коннекшен к базе, а не на поток. Поэтому если в каждом потоке использовать свой коннекшен (что по идее более правильно), то таких проблем возникать не должно.

    ОтветитьУдалить
  2. Когда на эту особенность наткнулся Каждый TransactionScope создавался для собственный connection - была сделана aspx-страница, которая в начале работы открывала соединение, по завершении - делала коммит транзакции. Или что-то похожее.

    Проблема начала проявляться при обработке нескольких запросов одновременно.

    ОтветитьУдалить