2013-04-22 53 views
9

我有一个Webhandler,它可以根据请求在我的asp.net项目中生成一个图像。但是如果用户直接访问资源,它将不会触发Global.asax文件中的会话启动事件。但在我的项目中,我需要触发会话开始事件。我怎样才能做到这一点?如何触发WebHandler请求的会话开始(Global.asax)事件?

void Session_Start(object sender, EventArgs e) 
    { 
     Session["Test"] = 1; 

    } 

回答

7

Session_Start事件trigerred每当一些服务器端的处理程序试图读取或写入会话。你可以尝试用IRequiresSessionState标记接口装饰你的处理程序:

public class MyHandler: IHttpHandler, IRequiresSessionState 
{ 
    ... 
} 
+1

使用'System.Web.SessionState'。对? – 2013-04-22 06:13:55

+0

是的,正如文档中所示。 – 2013-04-22 06:14:22

+0

让我再问你一件事吗?有时候另一个问题如果我想在WebHandler中使用会话但不想触发会话开始? – 2013-04-22 06:16:18

3

你总是可以让Session_Start的方法,并调用它

namespace WebFormsApplication1 
{ 
    public class Global : HttpApplication 
    { 
     void Session_Start(object sender, EventArgs e) 
     { 
      Global.StartSession(); 
     } 
    } 

    public static class Global 
    { 
     public static void StartSession() { 

      Session["Test"] = 1; 
     } 
    } 
} 

,并在您的处理程序,只需调用Global.StartSession();

+1

我可以在不触发会话启动事件的情况下使用WebHandler中的会话吗? – 2013-04-22 07:58:30