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