Это сложный вопрос, который нужно сформулировать. Мне интересно, как HttpContext.Current получает уникальный экземпляр для каждого запроса, рассматривая его как статический объект?
Спасибо!
Это сложный вопрос, который нужно сформулировать. Мне интересно, как HttpContext.Current получает уникальный экземпляр для каждого запроса, рассматривая его как статический объект?
Спасибо!
Ток не является статической переменной, его статическое свойство и свойство get - это не что иное, как статический метод, возвращающий текущий контекст.
ASP.NET хранит некоторую информацию с текущим потоком, вы всегда можете получить локальное хранилище потоков для хранения информации, которая является некой статикой только в текущем потоке и которая может быть доступна любым методом только в текущем потоке.
Таким образом, ASP.NET хранит некоторую локальную информацию в потоке, в котором HTTP-контекст выполняет запрошенное приложение и из любого вызова в Current будет извлекать данные локального потока и получать необходимую информацию.
Вы также можете посмотреть атрибут [ThreadStatic]
, который делает вещи почти так же.
Обновление
Из ASP.NET 4.5 и после, Current HttpContext
передается через CallContext
вместо [ThreadStatic]
, поэтому контекст остается доступным через асинхронные вызовы в одном логическом контексте вместо текущего потока, поскольку каждый асинхронный вызов может закончиться на разных потоках.
Вы должны прочитать это сообщение в блоге:
http://odetocode.com/Articles/112.aspx
Раздел, который начинается со следующего, должен вас заинтересовать. Это долго, иначе я бы сказал больше:
Любопытный среди нас будет удивляться просто как HttpContext.Current может найти контекст для текущего запроса.