【问题标题】:Session and Thread in ASP.NETASP.NET 中的会话和线程
【发布时间】:2011-12-05 12:34:50
【问题描述】:

我有一个 ASP.NET 网站,其中一个线程负责执行从数据库队列中检索的一些代码。

是否可以访问 Session 或将其作为参数传递?

我当前的代码如下所示:

MediaJob nextJob = GetNextJobFromDB();

CreateMedia media = new CreateMedia();

Thread t = new Thread(new parameterizedThreadStart(media.DOSTUFF);

t.Start(nextJob);

HttpContext.Current.Session 在线程中运行时为空,所以不能这样做

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    如果您的工作是在 asp.net 线程之外完成的,那么假设会话可用可能不安全。唯一确定的方法是将这些数据显式传递给线程。您可以通过在 named data slot 中分配数据来做到这一点

    【讨论】:

      【解决方案2】:

      编辑:

       HttpContext ctx = HttpContext.Current;
       Thread t = new Thread(new ThreadStart(() =>
                      {
                          HttpContext.Current = ctx;
                          worker.DoWork();
                      }));
       t.Start();
       // [... do other job ...]
       t.Join();
      

      【讨论】:

      • 作者编辑了他的答案说不,HttpContext.Current.Session 在新线程中不可用。
      • 答案中的代码与此处的代码一字不差地匹配。 stackoverflow.com/questions/8925227/…
      • Session 在线程内仍然为空,使用这种方法
      【解决方案3】:

      您无法从线程中访问会话,但您可以使用以下方式共享您的数据:HttpRuntime.Cache

      但有几件事要记住:与会话不同,缓存确实会过期。此外,缓存在所有网络用户之间共享。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 2010-09-19
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        相关资源
        最近更新 更多