TransactionScope: стало лучше? - PullRequest
5 голосов
/ 21 июля 2009

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 21 июля 2009

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

РЕДАКТИРОВАТЬ: чтобы более конкретно ответить на ваш вопрос, вот что говорит Страл о TransactionScope:

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

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

1 голос
/ 04 февраля 2012

По-прежнему существуют проблемы, связанные с TransactionScope. В моем текущем проекте мы нерегулярно сталкиваемся как с исключениями «Невозможно подключиться к распределенной транзакции», так и с TransactionInDoubtException. Оба исключения связаны с TransactionScope. Одним из обходных путей для обоих исключений является использование одного соединения оракула (если применимо, конечно). Читайте об этом в: Избегайте нежелательной эскалации распределенных транзакций

Для получения информации о влиянии на производительность, пожалуйста, прочитайте мой пост: Влияние на производительность с использованием TransactionScope

1 голос
/ 21 июля 2009

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

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

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

«Microsoft Windows Server 2003 с пакетом обновления 1 (SP1) и Microsoft Windows XP с пакетом обновления 2 (SP2) включают в себя множество обновлений и изменений, связанных с безопасностью. Некоторые из этих изменений влияют на службу координатора распределенных транзакций Microsoft (MSDTC)». Новые функции в службе координатора распределенных транзакций в Windows Server 2003 с пакетом обновления 1 и Windows XP с пакетом обновления 2

и

Технический документ Ювала Лоуи на System.Transaction: Представление System.Transaction в Microsoft .NET Framework версии 2.0

...