Non disperare... alla Session puoi accedere facendo una modifica.
Nel
ciclo di vita di un'applicazione Asp.net si susseguono varie fasi. Noi durante la discussione ne abbiamo incontrate alcune: BeginRequest (l'inizio della richiesta), PostAuthentication (che si verifica subito dopo l'autenticazione) e EndRequest (alla fine). Ce ne sono molte altre e le trovi riassunte in questa immagine.
http://i.msdn.microsoft.com/dynimg/IC142724.pngCome puoi vedere lì, la fase di autenticazione si verifica molto presto, quando ancora non è stata recuperata la sessione dell'utente.
La sessione viene recuperata più tardi durante la fase "Acquire state" ed è in quel momento che dovrai leggere la tua variabile.
Quindi, anziché gestire il PostAuthenticateRequest, gestisci il PostAcquireRequestState.
context.PostAcquireRequestState += Function....
A proposito, segui fedelmente gli esempi altrimenti non funzionano :) Nella Sub Init che hai postato prima manca la gestione del primo evento e poi vedo che il context.EndRequest è stato commentato, probabilmente in seguito a vari test.
Comunque, ora che hai gestito PostAcquireRequestState puoi accedere alla variabile di sessione in questo modo:
Dim nomeFile = HttpContext.Current.Session("nomefile")
'Ora uso nomeFile nel Replace della connection string, ma solo se il valore non è null
pistelli2001 ha scritto:
Poi all'inizio della classe mi chiede di importare il databasemodel.
Sì, va bene come hai fatto tu. Quando usi una classe qualsiasi, come pure DatabaseEntities, è necessario indicare in quale contenitore (namespace) essa si trova. La direttiva
Imports serve appunto a questo scopo, quindi va bene.
pistelli2001 ha scritto:
il modulo gestioneciclodivitadelcontesto nel webconfig viene caricato all' inizio ... quello che conta e' il type che si riferisce alla classe?
Sì, esatto. Il
name invece può essere una stringa qualsiasi. Di solito negli esempi vedi usare il nome della classe sia nel
name che nel
type, ma questa è una scelta più che una necessità.
pistelli2001 ha scritto:
Se nella classe inserisco un break(f9) ho verificato che non si blocca quindi molto probabilmente non ci passa.
Ok, cerchiamo di capire come mai.
Se l'esecuzione non si ferma sul breakpoint e se l'applicazione non va in errore, allora probabilmente significa che il nodo <system.webServer> del web.config è stato ignorato.
Questo può capitare quando il tuo webserver è IIS 6.0 (windows server 2003) oppure quando sei su IIS 7.0 in "modalità classica" (windows server 2008 o superiore). Puoi confermarmi che si tratta di uno di questi due casi? Se è così allora gli httpmodules si configurano in altro modo:
<system.web>
<httpModules>
<add name="gestioneCicloDiVitaDelContesto" type="WebContextModule" />
</httpModules>
</system.web>
Qui trovi un articolo che ti mostra la differenza di configurazione tra IIS 6 e 7.
http://msdn.microsoft.com/en-us/library/ms227673%28v=vs.100%29.aspx#sectionToggle2Qui invece trovi una guida su come scoprire (e modificare) qual è la modalità di esecuzione, se
classica o
integrata.
http://technet.microsoft.com/it-it/library/cc725564%28v=ws.10%29.aspxciao
Modificato da BrightSoul il 07 novembre 2012 22.57 -