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

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

Спасибо!

Ответы

Ответ 1

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

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

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

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

Обновление

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

Ответ 2

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

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

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

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