2009-07-20 2 views
5

Когда TransactionScope впервые вышел, я столкнулся с некоторыми серьезными проблемами, которые заставили его работать между моей машиной dev (XP) и нашим сервером баз данных (Windows Server 2003).TransactionScope: Получилось ли это лучше?

Когда я смотрел на него больше, это оказалось сложной и распространенной проблемой, которая имела возможность стать головной болью на производстве, поэтому я решил не обрабатывать транзакции таким образом (хотя мне очень нравится синтаксис и Я действительно хотел, чтобы это сработало).

Эти проблемы все еще существуют или безопасны в использовании? Вы используете это регулярно сейчас без проблем?

Большое спасибо!

Примечание: Прошло много времени, но я думаю, что проблема связана с распределением координаторов транзакций. Я долго искал ее и никогда не мог заставить его работать.

ответ

8

У Rick Strahl есть отличная статья об области транзакций и LINQ to SQL here. Его контекст больше LINQ to SQL, но я думаю, что есть некоторые принципы, которые применимы, которые могут помочь вам решить ваш вопрос.

EDIT: более конкретно ответить на ваш вопрос, вот что Стрэхл должен сказать о TransactionScope:

Традиционно TransactionScope был .NET обертка вокруг координатора распределенных транзакций (DTC), но это функциональность расширена несколько. Одна из проблем заключается в том, что DTC является довольно дорогостоящим с точки зрения использования ресурсов, и для этого требуется, чтобы служба DTC фактически работала на машине (еще одна услуга, которая особенно утомительна при установке клиента).

Однако последние обновления для TransactionScope и драйверов клиента SQL Server позволяют использовать класс TransactionScope и его простоту использования, не требуя DTC, если вы работаете с одной базой данных и с единой последовательной строкой соединения

+0

Кажется, что это правильный ответ. Спасибо, Джош! –

1

Я использую TransactionScope более года без каких-либо проблем. Однако приложение является внутренним приложением с очень небольшим количеством пользователей. Кроме того, база данных и приложение находятся на одном сервере.

Вот некоторая информация о TransactionScope и где искать для получения дополнительной информации: Всякий раз, когда вы создаете объект TransactionScope начинается легкий сделки. Затем, пока вы используете одно соединение/ресурс, который поддерживает легкие транзакции, транзакция будет обрабатываться менеджером ресурсов, потребляющим как можно меньше ресурсов с очень хорошей производительностью. Когда вы добавляете второе соединение/ресурс в область транзакций, менеджер транзакций автоматически будет переведен в диспетчер транзакций OleTx, который может обрабатывать распределенные транзакции с использованием технологий COM + DTC. Это также произойдет с одним подключением к диспетчеру ресурсов, который не поддерживает легкие транзакции, такие как SQL Server 7/2000, Oracle и другие РСУБД.

Вот два ресурса, которые могут быть в состоянии помочь вам:

«Microsoft Windows Server 2003 с пакетом обновления 1 (SP1) и Microsoft Windows XP с пакетом обновления 2 (SP2) включают в себя множество обновлений, связанных с безопасностью и изменения Некоторые из этих изменений влияют на службу Microsoft Distributed Transaction Coordinator (MSDTC)." New functionality in the Distributed Transaction Coordinator service in Windows Server 2003 Service Pack 1 and in Windows XP Service Pack 2

и

Whitepaper

Джувал Лоуи на System.Transactions:. Introducing System.Transactions in the Microsoft .NET Framework version 2.0

1

Есть еще вопросы, касающиеся TransactionScope В моем текущем проекте мы через неравные промежутки времени нарваться как«Не удается привлечь в исключение распределенной транзакции и исключение TransactionInDoubtException. Оба исключения, относящиеся к TransactionScope.Одним обходным решением для обоих исключений является использование одного оракульного соединения (если применимо, конечно). Читайте об этом в: Avoid unwanted Escalation to Distributed Transactions

Для получения информации об эффективности воздействия прочитайте мой пост: Performance impact using TransactionScope

+0

+1: но для того, чтобы быть ясным, вы используете Oracle здесь, верно? Интересно, является ли это специфичным для Oracle. –

+0

Да, я использую Oracle – strmor

Смежные вопросы