Переменная сеанса теряется с большими файлами - PullRequest
0 голосов
/ 20 мая 2019

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

  1. пользователю предлагается загрузить файл (который хранится в переменной сеанса);
  2. пользователю предлагается сделать несколько выборов на основе предоставленного входного файла;
  3. пользователю предоставляется анализ.

Это работало отлично, до недавнего времени загружался файл большего размера (15 МБ). Файл все еще сохраняется в переменной сеанса от шага 1 до шага 2. Однако нажатие любой кнопки на шаге 2 приводит к потере переменной сеанса. Меньшие файлы работают по назначению.

Мы провели некоторое исследование, но следующее не должно быть проблемой:

  • Мы не занимаемся вопросами тайм-аута;
  • Мы не установили ограничение виртуальной памяти в нашем DefaultAppPool, и у нас достаточно оперативной памяти.

Для уточнения, я включил код ниже.

На шаге 2 мы проверяем наличие одной из переменных сеанса (с ключом CasesSessionKey) и создаем еще одну (с ключом GraphSessionKey). И то, и другое успешно сделано:

if (!HttpContext.Session.Keys.Contains(CasesSessionKey))
            {
                return RedirectToAction(nameof(Index));
            }

            var processMiningResult = HttpContext.Session.GetFromJson<ProcessMiningResult>(CasesSessionKey);
            HttpContext.Session.SetAsJson(GraphSessionKey, graph);

Тогда на шаге 3 переменные сеанса отсутствуют. Меньшие файлы не имеют этой проблемы:

            if (!HttpContext.Session.Keys.Contains(CasesSessionKey) ||
                !HttpContext.Session.Keys.Contains(GraphSessionKey))
            {
                return RedirectToAction(nameof(Index));
            }

Я ожидал, что обе переменные сеанса все еще доступны на шаге 3, но это не так. Что вызывает эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...