2013-03-23 10 views
7

Nella mia applicazione web sto usando System.Web.HttpContext.Current e rappresenta il contesto attuale, mi stavo chiedendo come sia accessibile da ovunque fino a quando ho notato che è un membro static! Mentre è un membro statico come mantiene il suo valore mentre se due richieste ricevute quasi nello stesso tempo. come la seguente:System.Web.HttpContext.Current è statico tra le richieste

#Req1----> | set the value of the static field to req1 
#Req2----> | set the value of the static field to req2 
#Req1  | use that static its supposed to be req2 while its req1 

mi sono perso capire qualcosa o c'è un trucco in esso o che cosa?

risposta

5

Questa è una domanda molto intelligente!

HttpContext.Current è implementato come variabile locale del thread. In realtà, è implementato usando LogicalCallContext ma che si comporta come un thread locale.

Pensate a come questo:

[ThreadLocal] 
public static HttpContext Current; 

E sì, questo significa che solo il thread richiesta primario può accedervi. Sarà nullo su thread aggiuntivi che inizi.

+0

Signore, grazie mille per la risposta! ora tutto è molto più chiaro, ma ho una domanda, cosa intendi con 'la sua implementazione usando LogicalCallContext', e grazie ancora per la tua risposta molto utile. – Hilmi

+0

Quando si apre la proprietà con Reflector, si scopre che il valore non proviene da un campo locale thread-statico ma da CallContext ea sua volta da LogicalCallContext. Sono classi infrastrutturali di basso livello di cui conosco poco. Sono essenzialmente strutture dati per thread (ma non del tutto). Penso che ogni richiesta in ASP.NET o WCF abbia un tale contesto di chiamata ma potrei sbagliarmi. – usr

+0

grazie mille, cercherò di più su questo argomento, ma la tua risposta è stata completa! grazie ancora. – Hilmi

Problemi correlati