Free Web Analytics Come promesso...in download slides e demo - Blog di Tiziana Loporchio

Blog di Tiziana Loporchio

My .NET Passion
Microsoft Certifiied Trainer [MCT]

Come promesso...in download slides e demo

Ciao,

ho messo nella sezione Download tutto il materiale utilizzato ieri per la mia sessione.

Spero che possa essere un inizio per raccogliere nel forum o dal form di contatto le vostre impressioni, i vostri commenti e magari richieste di approfondimenti o chiarimenti di quanto ho potuto trasferirVi ieri durante la mia sessione e del codice che ho inserito nelle demo.

Mi associo a Fabio e ringrazio tutti per la bella giornata trascorsa !

 

Comments

Evandro said:

Io ringrazio voi invece, perchè questi eventi un po' ci fanno crescere professionalmente e un po' ci danno nuovi spunti per lavorare e nuovi punti di riferimento, voi.

Ciao

# October 29, 2006 11:17 AM

Evandro said:

Io ringrazio voi, perchè grazie a questi eventi abbiamo la possibilità di aggiungere molto alle nostre conoscenze, avere nuovi spunti e nuovi punti di riferimento a cui rivolgersi anche per consigli e confronti.

Ciao

# October 29, 2006 12:01 PM

Tiziana said:

Evandro... Come dimenticare il tuo nome...te l'avrò chiesto almeno tre volte ! Big Smile...sono stata davvero felice per quello che mi hai detto a fine sessione! Avevo un obiettivo in quel tempo a mia disposizione e tu hai centrato quello che volevo trasferire: la possibilità di fornire spunti, piccole pillole che permettessero l'inizio di approfondimenti anche con il nostro supporto! A proposito aspettiamo le tue proposte per i prossimi eventi e le altre attività nell'area del forum riservata agli associati DotNetSide in quanto ormai sei un componente dell'associazione con tanto di cappellino ! Ciao !

# October 29, 2006 10:27 PM

Leo said:

Ciao Tiziana, sono Leo (il cugino di Michele Locuratolo), ci siamo visti al workshop di giovedì scorso.

Ho scaricato il materiale che hai messo a disposizione sul sito ma non riesco a farlo funzionare correttamente. Dopo aver installato lo starter kit e creato un nuovo progetto web usando lo starter kit come template, il nuovo progetto web è privo di tutta la parte relativa agli utenti (Membership, role, ecc). Ho utilizzato aspnet_regsql.exe per creare il nuovo db sql per la gestione degli utenti e ho anche aggiunto nel web.config la parte relativa a auth. membership, ecc. Mi mancano tutte le pagine per la gestione degli utenti e quando mando in debug il progetto ho un errore " Impossibile caricare il tipo 'ReadOnlyXmlRoleProvider'." sulla riga del web.config.

Volevo sapere come porter aggiungere le pagine che mi mancano per ottenere il progetto così come tu lo hai presentato considerando che il lavoro è in VB.

Grazie

Leo

(email leoger@libero.it)

# October 30, 2006 12:20 PM

Tiziana said:

Ciao Leo, lo Starter Kit è la base del progetto che ho presentato durante la sessione, privo di tutto quello che ho volutamente aggiunto al Template di base.

Il progetto in download è in C#, nel pomeriggio cercherò di metterne in download anche una versione VB per chi lo preferisce.

Al progetto di base puoi aggiungere i files ricreando la struttura di directory per l'area privata che io fornisco (Cartella "MembersOnly"). Con "Add Existing Files" potrai aggiungere al tuo progetto le risorse ASPX che ti mancano appena in download la versione VB.

Per l'errore che ricevi su "ReadOnlyXmlRoleProvider" devi aggiungere nella cartella App_Code le classi che ho fornito nel progetto in download ma in versione VB!.

Cmq nel pomeriggio in arrivo la versione VB ;)

# October 30, 2006 12:41 PM

fabrizio said:

Salve, ho raggiunto questa pagina cercando info su

ReadOnlyXmlRoleProvider che ho trovato su

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ASPNETProvMod_Prt2.asp

, immagino o almeno spero sia stato trattato nella sessione da te tenuto, ne approfitto per fare una domanda riguardo il dictonary usato per contenere  gli utenti e i ruoli, ho visto che viene riempito solo nell'evento initialize che viene chiamato solo la prima volta che si accede alla classe, quindi sembra che sia persistente, io ho provato a vedere se i dati vengono salvati in un cookie, sessione o cache ma non ho trovato traccia, come è possibile considerando che lo stato della classe dovrebbe essere perso ogni postback?

gazie.

# November 8, 2006 12:15 PM

Tiziana said:

Ciao Fabrizio,

quello che dici è vero in parte, considerando che tutte le classi dei provider derivano da System.Configuration.Provider.ProviderBase condividono l'Initialize.

I Providers, in generale, sono caricati quando l'applicazione ne utilizza una caratteristica. In definitiva sono istanziati una volta per applicazione (app domain).

Questa modalità "one-instance-per-application" è conveniente proprio perchè rende persistenti le informazioni tra le varie richieste (ecco perchè postback non c'entra).

I Providers risultano quindi un'eccezione al modello "one-instance-per-thread" (per-request).

Sono istanziati una volta durante l'application's lifetime e condivisi tra tutte le richieste. Questo significa che dato che ogni richiesta è processata in un thread differente, più threads potrebbero usare il Provider (con relativi problemi di concurrency). Per questo i Custom providers dovrebbero essere thread-safe. (Considera che ASP.NET assicura che solo l'Initialize non sia usato da più threads contemporaneamente...)

Il problema nasce e provoca errori di concorrenza quando due o più threads accedono ai dati e almeno uno di essi è in scrittura piuttosto che in lettura e non è il caso dell'ReadOnlyXmlRoleProvider; infatti il metodo ReadRoleDataStore essendo richiamato nell'Initialize (one thread guaranteed), per giunta in sola lettura, non necessita di codice di thread synchronization e mantiene i dati in maniera persistente tra le varie richieste.

# November 8, 2006 2:04 PM

fabrizio said:

Quindi da quello che dici tutti gli utenti che utilizzeranno la mia applicazione accederanno alla stessa istanza del provider, siccome io non posso caricare i ruoli di tutti gli utenti nell'initialize lo faccio nell'evento GetRolesForUser per ogni singolo utente, a questo punto potrei cercare nel dictonary l'utente corrente se non c'è faccio la query e lo aggiungo con i ruoli, l'unica mia preoccupazione riguarda proprio il thread-safe, devo preoccuparmi magari con un lock sul dictonary che 2 thread non accedano contemporaneamnete, ci pensa il framework o mi puo consigliare una strada migliore?

grazie ancora!

# November 8, 2006 2:42 PM

Tiziana said:

Non te ne devi preoccupare perchè per evitare ridondanza nel file I/O e nel parsing XML, il Povider legge il File XML una sola volta e lo fa nell'Initialize (one thread guaranteed).

...tu dici : "se non c'è faccio la query e lo aggiungo con i ruoli".

Considera però che ReadOnlyXmlRoleProvider   implementa metodi che leggono dalla sorgente XML,ma che non scrivono nel file XML. IsUserInRole, RoleExists funzionano, ma metodi come CreateRole, AddUserToRole non sono supportati da questo provider.

# November 8, 2006 2:56 PM

fabrizio said:

Scusa non mi sono spiegato bene, il ReadOnlyXmlRoleProvider l'ho preso solo come esempio, il provider che sto scrivendo io chiede users/roles ad un webservice il quale non ha (e non potrà avere) un metodo per restituire tutti gli utenti con i rispettivi ruoli, l'unico metodo che posso chiamare prevede l'utente in input e i ruoli in output, quindi nel mio provider nell'evento GetRolesForUser controllo che nel dictionary (ma potrei usare qualsiasi altro oggetto per contenere i dati) sia presente l'utente corrente, se no chiedo al WS e aggiungo, è proprio qui che ho paura di avere problemi di concorrenza tra + thread.

# November 8, 2006 3:13 PM

Tiziana said:

Ok, SI potrebbero esserci problemi in questo caso essendo fuori dall'Initialize() quindi preoccupati di scrivere codice thread-safe con lock e sync code.

# November 8, 2006 3:47 PM