Обработчики HTTP и состояние сеанса

По умолчанию обработчики HTTP не имеют доступа к состоянию сеанса, специфическому для клиента. Это связано с тем, что обработчики HTTP обычно используются для низкоуровневых задач, и пропуск шагов, необходимых для сериализации и получения информации о состоянии сеанса, позволяет незначительно повысить производительность. Однако если вам нужен доступ к информации о состоянии сеанса, вы просто должны реализовать один из следующих двух интерфейсов:

IRequiresSessionState

IReadOnlySessionState

Если вам необходим доступ только для чтения к состоянию оеанса, вы должны реализовать интерфейс IReadOnlySessionState. Если вам нужно модифицировать или добавить информацию о состоянии сеанса, вам надлежит реализовать интерфейс IRequiresSessionState. Оба эти интерфейса не могут быть реализованы одновременно.

Эти два интерфейса не содержат никаких методов. Это означает, что вам не нужно писать никакого дополнительного кода, чтобы разрешить поддержку сеанса. Например, если вы хотите использовать состояние сеанса только для чтения с помощью класса SimpleHandler, вы должны объявить его следующим образом:.

public class SimpleHandler : IHttpHandler, IReadOnlySessionStafce
{ ... }


Чтобы на самом деле получить доступ к объекту Session, нужно воспользоваться объектом HttpContext, который передается методу ProcessRequest(). Он предлагает свойство Session.

С помощью асинхронных обработчиков можно принимать дополнительные запросы, поскольку обработчик, создает новый поток для обработки каждого запроса, а не использует рабочий процесс. Естественно, применение этого подхода связано с риском. А именно: если вы создадите слишком много потоков или же попытаетесь выполнить за один раз, слишком много работы, потребляющей много ресурсов ЦП, производительность всего Web-сервера резко снизится. Асинхронные обработчики HTTP выходят за рамки вопросов, рассматриваемых в этой книге, поэтому вы можете прочитать о них в журнале MSDN Magazine, доступном по адресу http://msdn.microsoft.com/msdnmag/issues/03/06/Threading.

Создание специального модуля HTTP

Создать специальные модули HTTP можно так же просто, как и специальные обработчики HTTP, Необходимо лишь создать класс, который бы реализовывал интерфейс System.Web.IHttpModule. Вы можете затем зарегистрировать свой модуль, добавив его в раздел <httpModules> файла web.config. Однако вам не нужно будет конфигурировать IIS для использования ваших модулей HTTP. Это объясняется тем, что модули используются для каждого Web-запроса автоматически.

предыдущая    следующая страница   оглавление

249

Hosted by uCoz