ASP.NET WebForms: Возможно ли хранить / обновлять данные сеанса в потоке в среде с балансировкой нагрузки с использованием SQL server?

#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 для вывода процесса в сеанс?