#asp.net #sql #multithreading #session #webforms
#asp.net #sql #многопоточность #сеанс #веб-формы
Вопрос:
Мы используем ASP.NET Веб-сайт WebForms с балансировщиком нагрузки, хранящим переменные сеанса с использованием SQL server (на данный момент я не могу изменить эту конфигурацию).
Мне нужно загрузить файл и обработать его, что может занять некоторое время. Я хотел бы дать отзыв пользователя о текущем процессе.
Я нашел решение, в котором я запускаю поток, обрабатывающий файл. Этот вызов веб-метода возвращается непосредственно с уникальным идентификатором guid, идентифицирующим процесс. На клиенте я вызываю веб-метод, чтобы получить текущее состояние процесса. Поток обновляет статус процесса, который сохраняется в сеансе de.
Проблема в том, что это не работает в среде с балансировкой нагрузки, поскольку сеанс сериализуется на SQL server при вызове начального запроса процесса.
Мой вопрос таков (я много искал и не смог найти точного ответа)::
Есть ли способ обновить переменную сеанса внутри потока, чтобы она была повторно сериализована на SQL server?
Комментарии:
1. Нет, невозможно получить доступ к сеансу в потоке — без реальной страницы. Единственный способ — создать свой личный класс сеанса и менеджер
2. Вы думали, используя асинхронную задачу в webform (например: Страница. RegisterAsyncTask ), а затем обновлять сеанс из обратного вызова?
3. Обработка файла отделена от загрузки? Не могли бы вы создать пользовательский HTTP-обработчик и создать класс, который реализует System.Web.SessionState. IRequiresSessionState для вывода процесса в сеанс?