Переменная сеанса создается и доступ к ней выполняется долго - PullRequest
0 голосов
/ 29 мая 2011

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

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

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

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

Я занимаюсь разработкой на C # с .NET 4.0 Entity Framework 4.0, jQuery и MS SQL 2008 R2.

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

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

Спасибо

Ответы [ 2 ]

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

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

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

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

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

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

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

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

например

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

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

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

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

...