Ответ 1
Попросите HttpHandler реализовать интерфейс IRequiresSessionState. Это позволит использовать состояние сеанса.
IRequiresSessionState можно найти в пространстве имен System.Web.SessionState
.
У меня есть HttpHandler, который запускается на клиентской странице (кросс-домен, а не на нашем сервере IIS и т.д.), и когда они нажимают на нашу встроенную ссылку, она запускает Handler на нашем сервере. Пока все работает нормально.
Теперь я пытаюсь использовать объект System.Web.HttpContext.Session, но он равен нулю. Я думаю, что это null, потому что у нас нет сеанса, пока не будет вызван наш HttpHandler? И несколько вызовов обработчику создадут новый сеанс для каждого звонка? Если это так, MS просто отключил объект Session при вызове в HttpHandler? Кто-нибудь может это подтвердить?
Если это так, что вы делаете для поддержания состояния между вызовами? Какой-то объект данных на основе SQL? Файл?
ТИА
Попросите HttpHandler реализовать интерфейс IRequiresSessionState. Это позволит использовать состояние сеанса.
IRequiresSessionState можно найти в пространстве имен System.Web.SessionState
.
Я думаю, вам нужно реализовать пустой интерфейс IReadOnlySessionState, чтобы контекст загрузился.
изменить, чтобы добавить:
По словам Майкла Мортона, вы также можете внедрить IRequiresSessionState, который даст вам доступ к записи также к объекту Session
using System;
using System.Web;
using System.Web.SessionState;
public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context)
{
context.Response.Write(context.Session["kmx"]);
}
}
попробуйте использовать текущий контекст...
System.Web.HttpContext.Current.Session