Как работает HttpContext.Current? - PullRequest
       2

Как работает HttpContext.Current?

16 голосов
/ 05 августа 2010

Это довольно сложный вопрос для формулировки. Мне интересно, как HttpContext.Current получает уникальный экземпляр для каждого запроса, учитывая, что это статический объект?

Спасибо!

Ответы [ 2 ]

19 голосов
/ 05 августа 2010

Current не является статической переменной, ее статическое свойство, а свойство get - это не что иное, как статический метод, который возвращает текущий контекст.

ASP.NET хранит некоторую информацию с текущим потоком, вы всегда можете получитьлокальное хранилище потоков для хранения информации, которая является статической только в текущем потоке, и которая может быть доступна любым методом только в текущем потоке.

Таким образом, ASP.NET хранит некоторую локальную информацию в потоке, в которомhttp-контекст выполняет запрошенное приложение, и из любого места вызов Current будет извлекать данные локального потока и получать необходимую информацию.

Вы также можете посмотреть атрибут [ThreadStatic], который делает вещи почти аналогичным образом.

Обновление

В ASP.NET 4.5 и более поздних версиях Current HttpContext пропускается через CallContext вместо [ThreadStatic], поэтому контекст остается доступным через асинхронные вызовы в одном логическомконтекст вместо текущего потока, поскольку каждый асинхронный вызов может заканчиваться в разных потоках.

10 голосов
/ 05 августа 2010

Вы должны прочитать это сообщение в блоге:

http://odetocode.com/Articles/112.aspx

Раздел, начинающийся со следующего, должен вас заинтересовать.Это долго, иначе я бы процитировал больше:

Любопытным среди нас будет интересно, как HttpContext.Current может найти контекст для текущего запроса.

...