Почему HttpContext.Current.Session доступен в HttpModule, но не в Response.Filter? - PullRequest
4 голосов
/ 01 апреля 2010

Я написал HttpModule, который добавляет фильтр ответов. Фильтр захватывает выходные данные страницы и сохраняет их в переменной сеанса.

  1. Я могу получить доступ к HttpContext.Current.Session в моем HttpModule.
  2. HttpModule обрабатывает событие PostAcquireRequestState.
  3. Я все еще могу получить доступ к HttpContext.Current.Session в событии PostAcquireRequestState.
  4. В событии PostAcquireRequestState я добавляю пользовательский поток, который наследуется от Stream в Response.Filter
  5. HttpContext.Current.Session является нулевым при доступе из метода Stream.Write.

Все работало нормально при использовании InProc SessionState. Однако теперь я должен использовать StateServer. Используя StateServer, код теперь не работает.

Есть идеи?

1 Ответ

0 голосов
/ 03 февраля 2011

Вы пытались передать объект сеанса из вашего HttpModule в конструктор фильтров и таким образом хранить ссылку?

Обычно я никогда бы не рассчитывал на доступ к HttpContext.Current в моих фильтрах, но передавал необходимые значения через конструктор или устанавливал некоторые свойства, прежде чем назначить его в Response.Filter.Это отделяет вещи и делает их более ремонтопригодными.

...