209 messaggi dal 23 agosto 2007
Salve,

in un'applicazione web [ASP.NET/C#] ho una classe nell' APP_Code responsabile di comunicare con un server esterno tramite un Session_ID.

Tale valore, una volta inizializzato, dovrebbe essere valido "Application_Level", ossia ogni utente lo utilizzerà per richiedere il servizio esterno. La validità di tale Session_ID è di un'ora, dopodichè un nuovo valore deve essere generato.

Al fine di ottenere questo ho utilizzato due variabili statiche con scope private per mantenere il valore del Session_ID e il TimeStamp in cui è stato generato:
   
private static string sessionID = null;   
private static DateTime? sessionCreationTime = null;   
   
if (string.IsNullOrEmpty(sessionID))   
{   
    string challengeID = this.getChallenge();   
    sessionID = this.getSessionID(challengeID);   
    sessionCreationTime = DateTime.Now;   
}   
else   
{   
    TimeSpan diffDate = DateTime.Now - sessionCreationTime.Value;   
    if (diffDate.Minutes > 50 || diffDate.Hours > 0)   
    {   
        string challengeID = this.getChallenge();   
        sessionID = this.getSessionID(challengeID);   
        sessionCreationTime = DateTime.Now;   
    }   
}

Facendo il debug dell'applicazione ho tuttavia notato se l'utente fa logout e login nuovamente il valore Session_ID viene reimpostato a null.

Quindi tali variabili rimangono vaide solo all'interno dell'i-esimo Thread utente e non a livello globale per tutti gli utenti?

Grazie per ogni risposta
Il protocollo http è per sua natuara Stateless quindi le variabili di sessioni vengono valorizzate per ogni utente connesso, Session non è quindi una variabile globale.
Per valorizzare variabili glogali devi utilizzare Application.

Qui trovi un bell'articolo   di Daniele Bochicchio:
http://www.aspitalia.com/articoli/application.aspx

Fabrizio Canevali
209 messaggi dal 23 agosto 2007
Grazie per i consigli, tuttavia io mi trovo in una classe C#, che non si riferisce direttamente ad un file ASPX.

Non ho a disposizione una reference a "Page" da cui posso ottenere Application.

Che tu sappia c'è un modo per aggirare tale limitazione?
grazie
Non hai bisogno di referenziare la classe Page ma puoi (devi) richiamare la singola richiesta HTTP tramite - System.Web.HttpContext.Current.
Quindi, nel tuo caso, valorizzare la variabile di applicazione in questo modo:
System.Web.HttpContext.Current.Application["myApplicationVariable"] = "variable";

Fabrizio Canevali
209 messaggi dal 23 agosto 2007
Grazie Fabrica!

Userò i tuoi consigli per Application.

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.