Применимо ли TransactionScope в .NET только к определенным типам транзакций? - PullRequest
0 голосов
/ 11 июля 2019

TransactionScope предоставляет функциональность для преобразования набора операций в транзакцию, чтобы либо все они были выполнены успешно, либо ни одного.Мой вопрос: применяется ли область транзакций к определенным типам операций (например, только к соединениям SQL, Azure и т. Д.)?

Например, рассмотрим блок кода ниже

using (TransactionScope scope = new TransactionScope())
{
    SaveToSQLserver(parameter);
    SaveToSalesForce(parameter);
    SaveToSAP(parameter);
    SaveToAzure(parameter);
    scope.Complete();
}

.ошибка возникает в SaveToSAP, где она уже сохранена в Salesforce;как транзакция будет откатана от Salesforce?И если все в памяти, то как оно будет гарантировать, что, когда оно действительно спасет, оно будет успешным?

1 Ответ

1 голос
/ 11 июля 2019

A TransactionScope способен поддерживать распределенные транзакции в разных типах систем, но это не автоматическая вещь.Эта документация дает представление об этом (стоит проверить всю иерархию документов в Обработка транзакций .

Как упоминалось Дейвом Андерсоном в комментариях,Диспетчер ресурсов контролирует, что делается во время фиксации и отката, поэтому «как это делается» регулируется индивидуально каждым менеджером ресурсов.

Итак, могут ли другие вещи участвовать в области транзакций, кроме только SQL? Да, ониМожет. Пока Resource Manager существует для каждой системы (например, системы обмена сообщениями), он может участвовать ( enlist ).

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

...