Откат транзакции Oracle в веб-сервисе - PullRequest
0 голосов
/ 11 января 2012

У меня есть несколько транзакций для вставки данных формы в таблицу оракулов.

if (InsertQuarterly() == true)
            {
                InsertMeasures();
            }

И если insertmeasures процедура выполнена успешно, то я должен вызвать другую процедуру.В течение InsertQuarterly я вызываю метод веб-службы для вставки данных в таблицу Oracle, например,

sOUT = ws_service.InsertQuarterly(txtQ2dTarget.Text, txtQ3dTarget.Text)

и для InsertMeasures Я звоню веб-службе

sOUT = ws_service.InsertMeasures(txtachieveGold.Text, txtachieveDia.Text)

Моя проблема, если InsertQuarterly выполнено успешно, но если InsertMeasures не удалось во время транзакции, то я также хочу откат InsertQuarterly.Как мне этого добиться?Я могу использовать OracleTransaction с transaction.Rollback().Но я использую различные методы веб-сервиса для транзакций.Как управлять откатом и совершать транзакции здесь .?

Какова лучшая процедура для обработки транзакций?

1 Ответ

0 голосов
/ 11 января 2012

Вам необходимо сотрудничество с поставщиком веб-сервисов.

Стандарты веб-сервисов разрешают поставщикам сервисов предлагать транзакционное поведение при вызове сервисов.По моему опыту, сравнительно немного авторов сервисов поддерживают транзакционность.Если используемые вами службы предоставляют такую ​​возможность, вам необходимо ознакомиться со спецификой использования WS-AtomicTransaction в вашей среде.

Однако при предоставлении таких транзакционных услуг возникают значительные накладные расходы и сложности в работе, что можетну почему мало кто так делает.Мое предпочтительное решение состоит в том, чтобы предоставить один крупномасштабный сервис, сочетающий в себе возможности InsertQuarterly и InsertMeasures - тогда эта реализация может очень легко управлять транзакцией Oracle в рамках одного вызова службы.

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

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

...