Sto esponendo un servizio WCF tramite un basicHttpBinding
che esegue diverse operazioni su un database.WCF basicHttpBinding: rollback quando la risposta al client non riesce
Desidero garantire che se il client non riceve la risposta, le operazioni del database vengono ripristinate (senza flusso di transazioni tramite WCF). E.g. il client chiama il metodo "DoX" che viene eseguito sul server ma prima che sia terminato il client si blocca. Le operazioni del database dovrebbero quindi essere ripristinate non appena la risposta non può essere inviata al client.
C'è un modo per farlo? L'attributo [OperationBehavior(TransactionScopeRequired=true)]
funziona in questo modo? C'è la possibilità di gestire gli errori di comunicazione sul lato server?
Update 1: Sembra [OperationBehavior(TransactionScopeRequired=true)]
impegna la transazione prima che la risposta è inviare al cliente e quindi non può essere utilizzato per eseguire un rollback se il cliente non riceve la risposta.
Aggiornamento 2: Per dirla chiaramente ancora una volta, non ho la necessità per la transazione di interagire in qualche modo con il lato client. Il cliente non deve conoscere la transazione, ha la possibilità di annullarlo o eseguirlo, né dovrebbe transitare alcuna transazione attraverso l'associazione. L'area solo deve essere ripristinata sul lato server se il canale di trasporto non è in grado di recapitare il messaggio al client di destinazione. Con il caso di TCP/IP queste informazioni dovrebbero essere prontamente disponibili per il server. (Nessun ACK del pacchetto TCP inviare al client)
Quindi, un flusso di esecuzione ipotetica sul lato server (notare la mancanza di lato client) dovrebbe essere:
Receive client request
Start transaction
Execute all logic inside the service operation
Send reply back to client
if (reply.failedToReceive) { transaction.Rollback() } // due to a failing TCP/IP transmission
Perché è necessario utilizzare basiHttpBinding? wsHttpBinding ti darà questo. –
@JustinDearing: i client che accedono al servizio non supportano wsHttpBinding. – GaussZ
per curiosità qual è la piattaforma client? Http://wso2.com ha un client di sapone per questo? –