Страница клиента использует JavaScript для публикации данных (файлов) из нескольких частей на моем сайте ASP.NET (обработчик ashx).
Пользователь выбирает несколько файлов и начинает одновременную загрузку. Если размер файла превышает 150 МБ, это создает несколько одновременных обработчиков POST на стороне сервера ASP.NET.
У меня реализовано управление сессией, а также функция капчи, чтобы точно знать, не бот ли затопляет мой сервер.
Но проблема в начальной загрузке.
Каждый раз, когда обработчик обрабатывает POST
, он проверяет идентификатор сеанса (мой пользовательский сеанс, по одному на страницу пользователя) и добавляет размер Request.ContentLength
к общему размеру файлов POST
ed. за сессию. Эти данные сохраняются в XML.
Но так как несколько начальных сообщений происходят одновременно, средство записи XML, которое записывает сумму байтов "дросселей" и сообщает 0 байтов за сеанс для всех начальных POST
с, поскольку они поступают одновременно.
Я реализовал lock
на своем persister
объекте (который выполняет запись в XML), но теперь, пока один POST не будет полностью обработан, другие не могут продолжаться.
Также, несмотря на то, что я ничего не делаю с запросами, которые приходят «после лимита загрузки», им все равно требуется время для загрузки данных на сервер.
Итак, мои вопросы:
Каков правильный шаблон для обработки нескольких одновременных POST
загрузок?
Есть ли способ немедленно удалить POST, как только запрос отфильтрован в коде обработчика ASP.NET, и сэкономить клиенту усилия по загрузке данных в IIS?
ОБНОВЛЕНИЕ: Когда lock
используется только для записи XML / вычисления максимальной продолжительности сеанса, у меня все еще есть параллелизм, что хорошо. Теперь мне нужно только выяснить, как немедленно удалить сеанс из кода обработчика ashx.