从后台线程访问SessionState

时间:2011-05-28 09:57:22

标签: c# asp.net multithreading session-variables

我有一个执行长时间运行任务的asp.net页面。所以我在一个单独的线程中执行任务,并定期轮询页面以检查状态。

public partial class ResultPage : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      Thread t = new Thread(new ThreadStart(delegate()
      {
         ProcessItems(parameters);
      }));
      t.Name = "ThreadInfoPathProcess";
      t.Priority = ThreadPriority.Normal;
      t.Start();
   }

   private void ProcessItems(Parameters params)
   {
      //
      //some code
      //

      //save the result in session and take it from another page
      lock (this.Session.SyncRoot)
         this.Session[resultid] = result;
   }
}

但是当我从另一个页面访问会话时,我将会话变量视为null。这可能是什么问题?

1 个答案:

答案 0 :(得分:2)

正确的方法是创建Windows服务,您可以通过Web应用程序的远程调用来调度长时间运行的进程(WCF - 可以通过命名管道进行本地访问)。然后,您的计时器将汇集页面,该页面将汇集Windows服务或检查某些状态记录,并将结果存储在数据库中。