Ho provato diversi modi per far funzionare una semplice serie di transazioni per una semplice situazione client/server WCF. Il mio server WCF ha una dichiarazione a livello di classe della classe Entity Framework per l'accesso al mio database e diversi metodi per modificare i dati e un metodo per SaveChanges. Sto usando Oracle Data Access (ODP.NET).Come posso far funzionare Entity Framework e WCF con le transazioni? Ok ... qual è il segreto?
Ad esempio, desidero chiamare una modifica dal client e quindi una chiamata separata per salvare le modifiche nel servizio WCF. Non funziona. In pratica, tutto viene eseguito correttamente, ma quando viene eseguita la seconda chiamata per salvare le modifiche, il servizio WCF non ha più il contesto originale e pertanto non vengono salvate modifiche (e, di conseguenza, la precedente chiamata che ha effettuato il rollback delle modifiche) .
Sto utilizzando lo scope Transaction attorno a entrambe le operazioni nel mio client ed eseguendo Complete() dopo aver terminato. I miei servizi WCF dispongono di OperationContract che utilizzano [TransactionFlow(TransactionFlowOption.Mandatory)]
e tali implementazioni del metodo utilizzano [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
. Infine, la mia configurazione Web è configurata con wsHttpBinding che ha la proprietà transactionFlow
impostata su True.
Non ho fortuna. Qualunque cosa provi, quando provo a colpire il servizio per il salvataggio successivo, il contesto EF è già stato rinnovato.
Non tutte le associazioni supportano le transazioni. http://www.wrox.com/WileyCDA/Section/Transactions-in-WCF-and-NET.id-305253.html – faester
Come stai gestendo la sessione tra le chiamate? WCF è senza stato per impostazione predefinita, quindi a meno che non si stia dirigendo WCF a fare qualcosa con lo stato, si potrebbe perdere qualcosa. –
Sono entità generate da edmx o poco generate – Praneeth