2012-01-11 4 views
0

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

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(). Но я использую различные методы webservice для транзакций. Как управлять откатом и совершать здесь.?

Какова оптимальная процедура обработки Сделок?

ответ

0

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

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

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

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

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

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