|
Тема |
Re: CORBA vs. Web Services [re: Гypy] |
|
Автор |
Пepин (овълчил се) |
|
Публикувано | 18.12.03 06:15 |
|
|
> Примерно, в жавешкия клиентски код в транзакция пращам СОАП заявка
> за плащане към уеб-сървиса на банк-уан. Те го обработват (също в
> транзакция) и ако всичко е точно ми пращат ОК СОАП отговор. Ако има
> грешка пращат отговор с грешката. Клиентския код commit-ва
> транзакцията само ако е получил ОК. Ако е получил грешка или не е
> получил никакъв отговор поради проблеми с връзката, ролбаква транзакцията.
Значи нещата са малко по-сложни. В сценария който описваш могат да се случат такива неща, че единия участник в разпределената транзакция да си мисли че тя е успяла, а връзката да се разпадне и другия да си мисли че се е провалила ... много неща могат да станат.
Хубавата новина е че хората са го измислили. Извън рамките на темата е, но единствения сигурен начин да правиш разпределени транзакции е т.нар. two-phase commit който се прави на две стъпки. Примерно при релационните БД за това отговаря XA протокола.
За да се реализира two-phase commit е необходимо всички участници в транзакцията да го поддържат. Примерно COM+ с ADO и подходяща БД (SQL Server, Oracle) и друга система на среща която може да работи с техния transaction coordinator го поддържат.
В сървърите за интеграция (WebMethods, BizTalk) има и понятието за long running transaction което може да е подходящия начин да се реализират транзакции в SOAP (нали може и по SMTP да се предава). Обаче пак трябва и двата участника да разбират за какъв механизъм за транзакции са се разбрали.
Hidden Treasures
|
| |
|
|
|