nel nostro progetto corrente, stiamo utilizzando ADO.NET Entity Framework come livello dati per l'applicazione. Ci sono alcune attività che richiedono di essere eseguite in una transazione perché c'è molto lavoro da fare nel database. Sto usando un TransactionScope per circondare quelle attività.Problema MSDTC con transazioni in ADO.NET Entity Framework
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
// Do something...
transactionScope.Complete();
}
Il problema è, non appena io sto usando un TransactionScope si verifica un'eccezione:
System.Data.EntityException: Il provider sottostante fallito su Apri. ---> System.Transactions.TransactionManagerCommunicationException: la comunicazione con il gestore delle transazioni sottostante non è riuscita. ---> System.Runtime.InteropServices.COMException (0x80004005): errore HRESULT E_FAIL è stato restituito da una chiamata a un componente COM.
Sembra che questo errore debba fare qualcosa con il MSDTC (Microsoft Distributed Transaction Coordinator). Quando cambio la configurazione di sicurezza di MSDTC viene lanciata un'altra eccezione:
System.Data.EntityException: il provider sottostante non è riuscito in Open. ---> System.Transactions.TransactionManagerCommunicationException: l'accesso di rete per Distributed Transaction Manager (MSDTC) è stato disabilitato. Abilitare DTC per l'accesso alla rete nella configurazione di sicurezza per MSDTC utilizzando lo strumento di amministrazione dei servizi componenti.
Tuttavia, se MSDTC è configurato, lo TransactionScope causerà un errore. Qualcuno sa cosa sta andando storto qui?
Penso in questo caso non utilizza la transazione, ma non ne sono sicuro. –
Sì, questa opzione indica che non dovrebbe prendere parte alla transazione. –
Ricevo lo stesso errore, ma non c'è modo che questa sia la risposta migliore. –