Estamos teniendo un servicio REST WCF. queremos que la operación de guardado en este servicio REST esté en transacción. ¿Hay alguna manera de pasar el objeto Transaction por el cable al servicio REST WCF?Transacción en el servicio REST WCF
Respuesta
Aquí hay una cita de Roy Fielding, el tipo que inventó el término REST
Si usted se encuentra en necesidad de un protocolo transacción distribuida, entonces ¿Cómo se puede decir que su arquitectura se basa en REST? Me simplemente no puedo ver cómo se puede obtener de una situación (de la utilización de estado aplicación REST en el cliente y hipermedia para determinar todo el estado transiciones) a la siguiente situación de necesidad de acuerdo de distribución de la semántica de transacción en la que el cliente tiene que decirle al servidor cómo administrar sus propios recursos.
... por ahora considero que "transacción de reposo" es un oxímoron.
Se trata de un message en la lista REST-hablar desde el 9 de junio de 2009.
El soporte de transacciones en WCF se maneja por medio de una de las muchas normas WS- *, y esas solo se aplican a SOAP - dudo mucho que la webHttpBinding respalde las transacciones per se.
Es posible que desee comprobar en el ADO.NET Dataservices, que son una capa encima de WCF REST.
Vea un blog post del equipo ADO.NET DataServices acerca de esto.
Marc
Aquí es una discusión reciente sobre el tema: http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/e66651c0-9202-4049-a8f4-55971b8b359d
Básicamente se dice: Una única petición no lo hace soporte de transacciones y no tiene sentido apoyarlas ya que solo una entidad y operación CUD está involucrada en una sola solicitud POST/PUT/DELETE. Pero las transacciones se pueden implementar en el lado del servidor en:
- usando solicitudes de lotes (un paquete entero de la POST/PUT/DELETE solicitudes se envían en un solo paso desde el cliente al servidor)
- y aprovechando el procesamiento tubería (comienza una transacción en el casoProcesamiento y cometer/retrotraer la transacción en el caso Procesado)
estoy básicamente de acuerdo con Roy Fielding citado en la respuesta de Darrel. Nunca debe exponer la plomería de la aplicación, como las transacciones de bases de datos a través de un servicio web RESTful. Sin embargo, podría abordar las transacciones distribuidas de una manera más funcional.
Supongamos que está implementando un sistema de punto de venta que puede recoger vales de regalo para compras. Los clientes deberían poder combinar los vales de regalo con los pagos con tarjeta de crédito. Tanto los cupones de regalo como los pagos con tarjeta de crédito son manejados por sistemas externos al punto de venta.Recolectar un vale de regalo y hacer un pago con tarjeta de crédito debería ser una transacción atómica. Para facilitar las cosas, centrémonos en un caso: los clientes primero recogerán el cupón de regalo y pagarán el resto del monto con su tarjeta de crédito. El pago con tarjeta de crédito puede fallar, por lo que también desea deshacer la colección de cupones de regalo cuando eso ocurra.
El servicio vale de regalo expone una URL para iniciar la recogida:
/gift-voucher/{gift-voucher-id}/collection
accediendo a esta dirección va a crear y persistir una reserva para el vale de regalo. La respuesta contiene una URL para la reserva:
/gift-voucher/{gift-voucher-id}/collection/reservation/${reservation-id}
Esta URL puede ser publicadas o borrado con el fin de ejecutar o cancelar la colección vale de regalo, respectivamente.
Tenga en cuenta que este enfoque solo se puede justificar para los servicios de aplicaciones donde hay un caso de uso funcional para revertir una transacción (es decir, el pago fallido con tarjeta de crédito). Intentar aplicar esto en servicios de nivel inferior como los servicios de la entidad probablemente requiera mucho trabajo y un rendimiento horrible. En este caso, puede preguntarse si un servicio RESTful realmente es la mejor opción.
- 1. Descargar archivo utilizando el servicio WCF Rest?
- 2. WCF REST Servicio no visible en WCFTestClient
- 3. Servicio WCF REST autohospedado y autenticación básica
- 4. Servicio WCF REST y SOAP sin WebServiceHostFactory
- 5. WCF REST Servicio JSON Publicar datos
- 6. una imagen de un servicio WCF REST
- 7. ¿Cómo se consume el servicio WCF en modo REST?
- 8. WCF REST Servicio: InstanceContextMode.PerCall no funciona
- 9. WCF REST RequestInterceptor authentication
- 10. añadiendo GZIP de servicio WCF REST en C#
- 11. alojamiento .NET 4.0 servicio REST WCF en IIS 6
- 12. WCF REST Compresión
- 13. ¿Consumo de servicio REST con WCF - Parámetros de Querystring opcionales?
- 14. Agregar HTTP auth básico a un servicio WCF REST
- 15. WCF REST problema de imagen servicio de carga
- 16. WCF REST Push Stream Service
- 17. Adjuntar archivos a las respuestas de servicio WCF REST
- 18. ¿Devuelve verdadero/falso en el servicio REST?
- 19. Cuándo utilizar WCF/REST
- 20. Autenticación de los servicios web WCF Rest.
- 21. Devolver datos no JSON, no XML en el servicio WCF REST
- 22. ¿Cómo puedo leer el encabezado de autorización de un servicio WCF basado en REST?
- 23. Servicio RMI vs REST
- 24. ¿Puedo generar una referencia de servicio automáticamente para un servicio REST WCF?
- 25. Cómo configurar Json.Net como el serializador predeterminado para el servicio WCF REST
- 26. Serializador JSON.NET para WCF REST Services
- 27. ¿Servicio web REST WSDL?
- 28. WCF REST POST de JSON: El parámetro está vacío
- 29. Cómo depurar el servicio WCF?
- 30. WCF REST Service - 401 No autorizado
Ok, entonces Fielding debería explicar (claramente, que es una tarea en sí misma) cómo se supone que le digo al servidor: cree estos dos recursos, pero al mismo tiempo, en lugar de crear primero este recurso, este otro recurso . –
POST/MyResourcePairs Le daré un ejemplo más real, pero encontrará que en la mayoría de los casos en que una transacción debe ocurrir, hay un nombre único que el usuario usa para referirse a ese evento. Por lo tanto, desde la perspectiva del usuario final, lo que describes rara vez existe. –
En otras palabras, violaría la restricción sin estado. – inf3rno