Когда то, когда впервые писал скрипт взаимодействия с платежными системами типа WebMoney и RBK Money, то столкнулся с определенными трудностями. Дело в том, что на сайте с автоматическим приемом платежей, для подтверждения/отклонения транзакции перевода средств на свой счет я тогда использовал простой обработчик web-handler - обычный файл .ashx. Вы уже наверное знаете, что данный тип файла предпочтительнее обычных страниц .aspx в тех случаях, когда необходимо взаимодействовать с входными и выходными запросами без рендеринга разметки, только чистые ответы данных.
Так вот, проблема заключалась в том, что перед отправкой данных клиента в сервис приема платежей, эти самые данные клиента помещались в сессию с целью потом, по завершению транзакции, их обработать соответствующим образом. Не буду вдаваться в детали всей этой кухни, поскольку нас интересует именно использование сессий в обработчике .ashx.
Кто пытался получить доступ к состоянию сеанса в веб хендлере, сразу понял, что голыми руками его не взять.
К примеру, наш обработчик:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Text;
public class Handler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
Да, внутри метода ProcessRequest мы таки можем обращаться к данным сеанса:
public class Handler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Session[0];
//или
HttpContext.Current.Session[0];
Но мне необходимо было получить целый объект уровня сеанса, а не значение конкретной записи сеанса.
То есть, получить надо было объект типа HttpSessionState:
HttpSessionState session = context.Session;
Компилятор ругнулся, что тип HttpSessionState не определен и возможно отсутствует ссылка на зборку.
Послушал дельный совет компилятора, я добавил пространство имен:
using System.Web.SessionState;
После этого больше проблем с доступом к типу HttpSessionState не возникало.
Вот такое простое решение, казалось бы, сложного вопроса.
Так что, мой вам совет. Не спешите, как я, накручивать проблему в таких ситуациях, а поинтересуйтесь сперва где находится интересующий вас тип. Как только вы это узнаете, получить требуемое пространство имен, или ссылку на содержащий объект типа не составит труда.