2012-03-10 13 views
5

I mają następujące proste obsługi (usunięte pewne kod vissibilty sake, ale poniżej jeszcze nie)Sesja w ogólnym trybie obsługi?

<%@ WebHandler Language="C#" Class="DownloadHandler" %> 
using System; 
using System.Web; 

public class DownloadHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     if (context.Session["t1"] != "true") 
     { 

     } 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

Linia if (context.Session["t1"] != "true") zawodzi z „obiekt odniesienia nie jest ustawiony na przykład obiektu.” i nie rozumiem dlaczego tak jest?

+0

Czym jest obiekt "null"? Czy jest to 'context' lub' context.Session'? – svick

+2

Niestety - znalazłem odpowiedź na moje własne pytanie. 'IRequiresSessionState' powinien zostać dodany (jak' public class DownloadHandler: IHttpHandler, IRequiresSessionState') – brother

Odpowiedz

11

To dlatego, że do obsługi protokołu http w celu uzyskania dostępu do Session należy jawnie zaimplementować interfejs IRequiresSessionState.

Należy pamiętać, że jeśli to zrobisz, nastąpi niejawne zablokowanie obiektu sesji i nie będzie możliwe jednoczesne przetwarzanie wielu procedur obsługi w tym samym stanie sesji.

Istnieje również interfejs IReadOnlySessionState dla dostępu do stanu sesji tylko do odczytu.

+0

Mam do czynienia z tym samym problemem użyłem iRequiresSessionState w moim kodzie obsługi, ale nadal nie mogę uzyskać dostępu do wartości sesji. klucze sesji są wciąż 0. czy ktoś może mi o tym powiedzieć? –