2012-07-02 21 views
6

Comprendo che l'API Web ASP.NET è stata creata per aiutare a implementare applicazioni leggere basate su REST. Tuttavia, ho bisogno che i miei servizi REST siano transazionali/facciano parte di una transazione. Ho provato a guardarmi intorno, ma sembra che non ci sia modo di integrare le API WEB come parte di una transazione avviata dal client. C'è un modo per fare questo?Transazioni con API WEB ASP.net

riguarda Jagadish

+0

Cosa consideri una transazione? Un'unità di lavoro generica? Un 'DbTransaction' o un' SqlTransaction'? – jrummell

+0

Stavo pensando di avere una transazione gestita da DTC, ma sembra che l'API WEB non la supporti – user1496864

risposta

4

Credo che ci si riferisca alle transazioni distribuite (tramite MSDTC) che possono propagarsi oltre i limiti del servizio.

Tuttavia, le transazioni distribuite sui servizi RESTful WCF non sono possibili perché non c'è semplicemente alcun modo di propagare e gestire lo stato della transazione su semplici richieste HTTP.

Si consiglia di cercare in servizi WCF semplici, su HTTP (wsHttpBinding) o TCP/IP (net.tcp), o anche dare un'occhiata su WCF Data Services.

4

arruolare le chiamate di servizio nelle operazioni è generalmente pensato come un comportamento SOAP non un comportamento REST. Almeno esiste un modo standardizzato di farlo con SOAP chiamato WS-AtomicTransaction.

Essere SOAP orientata, questo non è esplicitamente supportato dal Web API ASP.Net, ma è supportato da WCF

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

Sarebbe possibile implementare simili un comportamento simile se stessi in REST, ma è relativamente complesso da fare in modo affidabile.

+0

+1 per essere più veloce ... e giusta :) –

+0

"ma è relativamente complesso da fare in modo affidabile." - Qualche idea su quale sarebbe l'approccio se volessimo implementarlo? – user1496864

11

Se si controllano entrambe le estremità del cavo, è possibile ottenere ciò che si desidera.

La classe TransactionInterop esiste per fornire supporto per il lavoro con le transazioni tra i limiti del processo, sfruttando MS DTC.

contiene due metodi che sono interessanti per lo scenario:

È possibile utilizzare il primo metodo nel client per generare una transazione. Puoi impostarlo come un valore di intestazione personalizzato o un cookie per passarlo al tuo servizio. Una volta sul servizio, è possibile utilizzare il secondo metodo per creare la transazione localmente.

L'avvertimento principale su questo è che MS DTC dovrà essere abilitato e configurato su client e server. Questo è veramente realizzabile solo se i tuoi servizi vengono richiamati all'interno di un dominio Active Directory di Windows.