Создается переменная сеанса и доступ к ней перед долгим процессом?

У меня есть страница, которая выполняет длительный процесс, анализируя более 6 миллионов строк из нескольких файлов csv в моей базе данных.

Вопрос в том, что когда пользователь нажимает «GO», чтобы начать обработку и анализ 6 миллионов строк, я хотел бы установить переменную сеанса, которая будет немедленно доступна для остальной части моего приложения веб-сайта, чтобы любой пользователь веб-сайта знал, что пользователь с уникальным идентификационным номером начал разбор файлов, не дожидаясь окончания обработки 6 миллионов строк?

Также с помощью jQuery и JSON я хотел бы получить отзыв на веб-странице о том, какой CSV-файл обрабатывается и сколько строк было обработано.

Могут быть другие люди, анализирующие файлы одновременно, как я могу отследить все это и предотвратить любое смешивание и т. д. с другими пользователями, даже если на сайте нет входа или аутентификации пользователя?

Я разрабатываю на С# с .NET 4.0 Entity Framework 4.0, jQuery и MS SQL 2008 R2.

Однако я думал об использовании переменных сеанса в моем статическом [WebMethod] для вызовов jQuery JSON. Я не могу отменить сеанс, если не использую HttpContext.Current.Session, но я не уверен, как это решение будет работать?

Любые рекомендации или идеи будут в основном оценены.

Спасибо


person DeveloperDavid    schedule 29.05.2011    source источник
comment
как насчет использования куки?   -  person kobe    schedule 29.05.2011


Ответы (2)


Прежде всего: переменные сеанса не должны быть видны любому пользователю повсюду. когда какой-либо клиент подключается к серверу, сервер создает для них сеанс, и в следующий раз, когда тот же пользователь запрашивает (в течение времени истечения сеанса), сеанс (и его переменные) можно использовать.

Вы можете использовать для этого статический класс, если хотите.

Например

public static class MyApplicationStateBag
{
    public static Dictionary<string,object> Objects {get; private set;}
}

и для вашего отчета о проделанной работе. вы можете использовать asp:Timer для проверки процента выполнения каждую секунду или две.

вот пример кода, который я написал для asp:Timer в UpdatePanel: Написание триггера кода для панели обновлений.

Я предлагаю вам использовать руководство для определения текущего прогресса в качестве ключа к вашей сумке состояний.

person Maziar Taheri    schedule 29.05.2011

Правильный способ сделать это через службы, например службы WCF. Вы не хотите создавать огромную нагрузку на веб-сервер, который не должен этого делать.

Обычный сценарий:

  • Пользователь нажимает кнопку GO
  • Веб-сервер создает задание и запускает это задание в отдельной службе WCF.
  • Каждое задание имеет идентификатор и метаданные (статус, время начала и т. д.), которые сохраняются в хранилище.
  • Веб-сервер возвращает ответ с идентификатором задания пользователю
  • Пользователь через AJAX (JQuery) запрашивает задание в хранилище, после завершения вы можете получить результаты.
  • Вы также можете сохранить идентификатор задания в сеансе.

P.S. это не прямой ответ на ваш вопрос, но я надеюсь, что это поможет

person oleksii    schedule 29.05.2011