2012-07-02 46 views
6

Entiendo que ASP.NET WEB API se ha creado para ayudar a implementar aplicaciones ligeras basadas en REST. Sin embargo, necesito que mis servicios REST sean transaccionales/sean parte de una transacción. Traté de mirar alrededor, pero parece que no hay forma de enlistar APIs WEB como parte de una transacción iniciada por el cliente. ¿Hay alguna forma de hacer esto?Transacciones con ASP.net WEB API

respecto Jagadish

+0

¿Qué considera una transacción? Una unidad de trabajo genérica? ¿Una 'DbTransaction' o una' SqlTransaction'? – jrummell

+0

Estaba buscando una transacción administrada por DTC, pero parece que la API WEB no la admite – user1496864

Respuesta

4

Creo que se está refiriendo a las transacciones distribuidas (a través de MSDTC) que pueden propagarse sobre los límites del servicio.

Sin embargo, las transacciones distribuidas sobre los servicios WCF RESTful no son posibles porque simplemente no hay forma de propagar y gestionar el estado de la transacción a través de solicitudes HTTP simples.

Es posible que desee buscar servicios WCF simples, a través de HTTP (wsHttpBinding) o TCP/IP (net.tcp), o incluso echar un vistazo en WCF Data Services.

4

Alistar las llamadas de servicio en las transacciones es generalmente considerado como un comportamiento de SOAP no es un comportamiento RESTO. Al menos hay una forma estandarizada de hacerlo con SOAP llamada WS-AtomicTransaction.

estando orientado SOAP, no existe un soporte de forma explícita por la API Web ASP.Net, pero es soportado por la WCF

http://msdn.microsoft.com/en-us/library/ms730266

Sería posible implementar un comportamiento similar semejante a sí mismo en REST, pero es relativamente complejo hacerlo de manera confiable.

+0

+1 por ser más rápida ... y derecha :) –

+0

"pero es relativamente compleja de hacer de manera confiable". ¿Alguna idea de cuál sería el enfoque si quisiéramos implementarlo? – user1496864

11

Si controla ambos extremos del cable, es posible lograr lo que desea.

La clase TransactionInterop existe para proporcionar soporte para trabajar con transacciones entre límites de proceso, aprovechando MS DTC.

Contiene dos métodos que son interesantes a su escenario:

Puede utilizar el primer método en su cliente para generar una transacción. Puede configurarlo como un valor de encabezado personalizado o una cookie para pasarlo a su servicio. Una vez que esté en el servicio, puede usar el segundo método para crear la transacción localmente.

La principal advertencia es que MS DTC deberá estar habilitado y configurado en el cliente y el servidor. Esto solo se puede lograr realmente si se invocan sus servicios dentro de un Dominio de Active Directory de Windows.