Обработка больших одновременных HTTP-запросов POST в приложении ASP.NET

Клиентская страница использует javascript для отправки данных (файлов) составной формы на мой сайт ASP.NET (обработчик ashx).

Пользователь выбирает несколько файлов и начинает одновременную загрузку. Когда файлы больше 150 МБ, это создает несколько одновременных обработчиков POST на стороне сервера ASP.NET.

Я реализовал контроль сеанса, а также функцию проверки подлинности, чтобы точно знать, не является ли это ботом, заполняющим мой сервер.

Но проблема с начальным запуском загрузки.

Каждый раз, когда обработчик должен обрабатывать POST, он проверяет идентификатор сеанса (мой пользовательский сеанс, по одному на страницу пользователя) и добавляет размер Request.ContentLength. к общему размеру файлов POSTed за сеанс. Эти данные сохраняются в XML.

Но так как несколько начальных сообщений происходят одновременно, модуль записи XML, который записывает сумму байтов, "задыхается" и сообщает 0 байтов за сеанс для всех начальных POST, поскольку они приходят в одно и то же время.

Я применил блокировкук моему объекту persister(который выполняет запись XML), но теперь, пока один POST не будет полностью обработан, другие не могут продолжаться.

Также, несмотря на то, что я ничего не делаю с запросами, поступающими «после лимита загрузки», им все равно требуется время для загрузки данных на сервер.

Итак, мои вопросы:

Каков правильный шаблон для обработки нескольких одновременных загрузок POST?

Есть ли способ немедленно удалить POST, как только запрос будет отфильтрован в коде обработчика ASP.NET, и избавить клиента от необходимости загружать данные в IIS?

ОБНОВЛЕНИЕ: Когда блокировкавыполняется только при записи XML/расчете максимальной длины сеанса, параллелизм сохраняется, и это хорошо. Теперь мне нужно только выяснить, как немедленно удалить сеанс из кода обработчика ashx.

6
задан Cœur 20 July 2017 в 14:51
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: