TransactionScope annidato
vLuca non è online. Ultima attività: 11/11/2008 9.41.38vLuca
Inserito il: 07 ottobre 2008 18.15
10 messaggi dal 16 feb 2006 Istalla Microsoft Silverlight!
Ciao a tutti,
ho un problema sull'utilizzo di più transaction scope annidati.

Ecco la situazione :


      [...]
            using (TransactionScope ts = new TransactionScope())
            {
                if (Save() && Read())
                {
                    ts.Complete();
                    ret = true;
                }
            }
      [...]

        public bool Save()
        {
            using (TransactionScope ts = new TransactionScope())
            {
                [...] //salvo nuovo record
                ts.Complete();
            }
            return true;
        }

        public bool Read()
        {
            bool recordFound = [...] //leggo il nuovo record
            return recordFound;
        }



Ovviamente ho semplificato la mia situazione comunque il problema é che il metodo Read() non trova il record inserito dal metodo Save().

Utilizzo SQLServer 2005 e sto scrivendo dei record su un solo server e su un solo DB.

Sto sicuramente sbagliando qualcosa di mastodontico ...

Grazie
Luca
RE: TransactionScope annidato
vLuca non è online. Ultima attività: 11/11/2008 9.41.38vLuca
Inserito il: 08 ottobre 2008 16.39
10 messaggi dal 16 feb 2006 Istalla Microsoft Silverlight!
Ok, ci credo che non rispondete in quanto l'esempio che ho postato funziona correttamente... non mi sono spiegato bene.

Credevo che il problema fosse generalizzato... in realtà ho il problema solo se la funzione Save viene fatta da un provider. Nel mio caso é il metodo CreateUser del Membership provider che lancia la creazione di un nuovo utente all'interno della transazione.

La funzione Read legge poi il record appena inserito direttamente sulla tabella del database ma non lo trova.

Per le operazioni di Save e di Read utilizzo la stessa connessione in modo da essere sicuro di non uscire dallo scopo di transazione.

Qualcuno sa se ci sono controindicazioni nell'utilizzo di TransactionScope e MembershipProvider ?

Grazie
Luca
RE: TransactionScope annidato
Cradle non è online. Ultima attività: 04/12/2008 20.25.51Cradle
Inserito il: 08 ottobre 2008 17.02
contributi / Community manager / www.aspitalia.com / Blog / 512 messaggi dal 01 lug 2004 Istalla Microsoft Silverlight!
Ciao,

di quale provider parli? Il SqlMembershipProvider di ASP.NET?

Per le operazioni di Save e di Read utilizzo la stessa connessione in modo da essere sicuro di non uscire dallo scopo di transazione.


Forse mi sto perdendo qualcosa, ma mi sembra che il SqlMembershipProvider non consenta di fornire dall'esterno l'istanza della connessione. In ogni caso però, usando il transactionScope non dovrebbe essere un problema.. riesci a specificare il codice con un maggiore dettaglio?
RE: TransactionScope annidato
vLuca non è online. Ultima attività: 11/11/2008 9.41.38vLuca
Inserito il: 08 ottobre 2008 17.25
10 messaggi dal 16 feb 2006 Istalla Microsoft Silverlight!
Grazie della risposta, sto utilizzando un Custom Membership Provider.

Sto costruendo una funzione che permetta di gestire più comodamente i dati dell'utente e quindi nello stesso contesto faccio delle chiamate al mio provider e scritture / letture sul db.

Ho risolto il problema scrivendo direttamente sul db e non utilizzando più il provider... ma é una soluzione temporanea.

Nel mio provider utilizzo lo stesso DAL (tratto dal modulo delle Microsoft Enterprise Library) che uso nella funzione chiamante. Nel DAL viene interrogato il contesto di transazione corrente (System.Transactions.Transaction.Current) e da quello si recupera la connessione.

Seguendo in debug il codice, l'inserimento avviene correttamente e il provider mi restituisce un MembershipUser con i dati che mi aspetto, ma appena il controllo ritorna al metodo chiamante (che ovviamente é in un altro assembly) la lettura fatta direttamente sul DB non trova il record.

Devo ancora fare altre prove tra le quali utilizzare il provider anche per la read...

Per il codice é un po' troppo lungo... Sapete se ProviderBase o MembershipProvider hanno un gestore loro di transazione o qualcosa di simile ?

Grazie ancora
Luca
RE: TransactionScope annidato
vLuca non è online. Ultima attività: 11/11/2008 9.41.38vLuca
Inserito il: 09 ottobre 2008 14.15
10 messaggi dal 16 feb 2006 Istalla Microsoft Silverlight!
risolto !

Ovviamente non é un problema del transactionscope e neanche del provider, ma un banale errore di logica che portava al provider la chiave di scrittura errata... quindi la lettura non trovava il record perché il provider lo scriveva con una chiave diversa...

chiedo scusa se ho fatto perdere del tempo a qualcuno.

Ciao
Luca

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


PeppeDotNet - 1000 pt
gghi - 310 pt
fabrica - 50 pt

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008, SQL Prompt e 1 ebook!


COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums