Доступ к SessionState из фонового потока - PullRequest
1 голос
/ 28 мая 2011

У меня есть страница 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;
   }
}

Но когда я получаю доступ к сеансу с какой-то другой страницы, я получаю переменную сеанса как ноль.В чем может быть проблема здесь?

1 Ответ

2 голосов
/ 29 мая 2011

Правильный способ сделать это - создать службу Windows, в которой вы будете планировать свои длительные процессы через удаленные вызовы из веб-приложения (WCF - может быть локальным по именованным каналам). Затем ваш таймер объединит страницу в пул, которая, в свою очередь, либо объединит службу Windows, либо проверит некоторую запись состояния с результатом в базе данных.

...