Можно ли реализовать длительные транзакции с множественной записью с помощью WCF?

Можно ли с помощью WCF и координатора распределенных транзакций Microsoft реализовать длительную транзакцию в одной базе данных? Я нарисовал упрощенную версию рассматриваемого сценария.

Есть ли ограничение по времени, в течение которого должны совершаться транзакции?

Предполагая, что БД является SQL Server или Oracle, будет ли происходить блокировка во время транзакции? Будет ли это на уровне строки или на уровне таблицы?

введите здесь описание изображения


person Scampbell    schedule 28.03.2014    source источник


Ответы (1)


Транзакции базы данных должны быть кратковременными. См., например, Приемлемы ли долгосрочные транзакции?

Таким образом, хотя WCF и DTC позволят вам распределять транзакции между машинами и через вызовы SOAP, это не очень хорошая идея для описываемого вами сценария.

Вместо этого используйте компенсирующую логику транзакции, например. удалить вставленные Emp1 и Emp2, когда создание Emp3 не удается. Или вручную пометьте вставленные строки Emp1 и Emp2 как все еще находящиеся в транзакции, пока они все не будут успешно записаны. Или соберите действия в службе WCF, а затем (транзакционно) зафиксируйте их в базе данных, когда вся информация станет доступной.

Какое решение лучше, зависит от деталей вашего варианта использования.

person flup    schedule 10.04.2014
comment
Каковы ваши причины не использовать функции транзакций и надежного обмена сообщениями WCF? - person John Saunders; 11.04.2014
comment
Не помешал бы бэкап пункта про блокировку, описанного в ссылке. Мне кажется, это самая большая причина не делать этого, а не проблемы с подключением. - person Scampbell; 11.04.2014
comment
@JohnSaunders Часть, где говорится, что время проходит, означает, что транзакции будут долговечными, и это Плохая вещь. Для краткосрочных транзакций я успешно использовал DTC и WS-транзакции с использованием WCF и могу рекомендовать его. - person flup; 11.04.2014
comment
@Scampbell В связанном вопросе довольно подробно обсуждается, почему это плохая идея. Блокировка действительно самая большая проблема, вам придется поиграть с уровнем изоляции, если вы хотите прочитать вставленные, но еще не зафиксированные строки Emp. - person flup; 11.04.2014