Начало сессии в Http Handler ashx - PullRequest
       14

Начало сессии в Http Handler ashx

4 голосов
/ 24 февраля 2010

Я использую Http Handler ashx файл для показа изображений. Я использовал объект Session для получения изображения и возврата в ответе

Теперь проблема в том, что мне нужно использовать пользовательский объект Session. Это всего лишь оболочка в состоянии HttpSession. он не показывает данные сеанса, я проверил идентификатор сеанса, который также отличается Пожалуйста, добавьте, как я могу получить существующую сессию в файле Ashx?

Примечание: когда я использую ASP.NET Sesssion, он работает нормально

 [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class GetImage : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
    {

Ответы [ 3 ]

2 голосов
/ 23 мая 2010

Если вы хотите получить доступ к своему состоянию сеанса из ASHX или HttpHandler, вам нужно реализовать IReadOnlySessionState или IRequiresSessionState, если вам нужен доступ на чтение / запись.

1 голос
/ 05 марта 2010

Тот факт, что это ashx, не имеет значения - если предположить, что запрос порождается запросом из ожидающего сеанса; Я предполагаю, что это должно быть - но это могло бы заплатить, чтобы проверить точно, как запрос формируется. Всегда платит, чтобы вернуться к основам:)

Предполагая, что это нормально, вот как я это делал:

string sessionId = string.Empty; 
System.Web.SessionState.SessionIDManager sessionIDManager = new System.Web.SessionState.SessionIDManager();
bool supportSessionIDReissue;
sessionIDManager.InitializeRequest(httpContext, false, out supportSessionIDReissue); sessionId = sessionIDManager.GetSessionID(httpContext);
if (sessionId == null)
{
 // Create / issue new session id: 
 sessionId = sessionIDManager.CreateSessionID(httpContext);
}

В конце этого переменная sessionId будет (должна) содержать существующий идентификатор сеанса или вновь созданный, который можно использовать позже ..

0 голосов
/ 25 февраля 2010

вы можете просто использовать Actionresult вместо обработчика для этого

return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");

или

return (новый FileResult (Pathtoimage, "image / jpeg"));

это должно упростить ситуацию, если вы будете использовать элемент управления / действие в качестве URL-адреса

е

<img src="/Images/showImage/1">

тогда вы можете сделать так, чтобы ваши действия имели дело с чем-то вроде извлечения из db байтами потоковая передача, проверка проверки и т. д.

...