múltiples solicitudes SOAP en una única transacción del lado del servidor

Estoy buscando una solución lista para usar para obtener una transacción solo del lado del servidor en torno a algunas solicitudes SOAP. Estoy explícitamente no buscando una transacción distribuida o estándar WS- *, porque cambian la interfaz en el lado del cliente y necesito que sea solo del lado del servidor.

Entonces, para el cliente:

webservice.StartTransaction();//Or included in DoSomething(...)
webservice.DoSomething(Whatever);
webservice.DoSomethingElse();
webservice.CommitTransaction();//Or included in DoSomethingElse()

En el servidor, una Transacción debe iniciarse en webservice.StartTransaction() y confirmada en webservice.CommitTransaction. Si no hay compromiso en un período de tiempo limitado, la transacción debe deshacerse.

0
Las solicitudes se realizan desde el cliente: el cliente hace 4 llamadas (las del ejemplo). El servidor debe manejar esas 4 llamadas en una sola transacción.
agregado el autor Edwin, fuente
Esto no está muy claro. ¿De dónde se hacen las solicitudes? ¿El servidor? ¿Cómo se ingresó el código del servidor? Por una solicitud del cliente?
agregado el autor John Saunders, fuente
No estoy seguro de lo que quiere decir con "cambiar la interfaz en el lado del cliente". ¿A qué "interfaz" te refieres? ¿Ya está escrito "StartTransaction"?
agregado el autor John Saunders, fuente

1 Respuestas

Si bien sus requisitos no son del todo claros, es posible que desee considerar aprovechar la coordinación de servicios web (WS-Coordination) junto con la transacción atómica de servicios web (WS-AtomicTransaction).

La especificación WS-Coordination describe un marco extensible para proporcionar protocolos que coordinan las acciones de las aplicaciones distribuidas. Dichos protocolos de coordinación se utilizan para respaldar una serie de aplicaciones, incluidas aquellas que necesitan llegar a un acuerdo constante sobre el resultado de las actividades distribuidas.

http://docs.oasis-open.org/ws-tx/wstx-wsat-1.2-spec-os/wstx-wsat-1.2-spec-os.html

La especificación WS-AtomicTransaction proporciona la definición del tipo de coordinación de transacción atómica que se utilizará con el marco de coordinación extensible descrito en WS-Coordination. Esta especificación define tres protocolos de coordinación de acuerdos específicos para el tipo de coordinación de transacción atómica: terminación, confirmación de dos fases volátiles y confirmación de dos fases duraderas. Los desarrolladores pueden usar cualquiera o todos estos protocolos al crear aplicaciones que requieren un acuerdo constante sobre el resultado de las actividades distribuidas efímeras que tienen la propiedad de todo o nada.

https://www.oasis-open.org/committees/download.php/35161/wstx-wscoor-1%202-spec-os.pdf

A Microsoft-based example: http://msdn.microsoft.com/en-us/library/ms752261(v=vs.110).aspx

0
agregado
Sí, pensé en eso, pero implica complicar al cliente con los estándares WS- *. Me gustaría que el cliente haga algunas llamadas básicas y haga las transacciones solo en el servidor, para que los clientes "tontos" todavía puedan tener llamadas incluidas en una transacción atómica. Por ejemplo, un archivo se carga en 2 pasos, donde en el primer paso el cliente envía los metadatos (nombre de archivo, comentario, lo que sea) y el servidor devuelve un correlationId y en la segunda llamada jabonera el cliente envía solo correlationID y filedata y luego el el servidor se compromete con ambos.
agregado el autor Edwin, fuente