Обработка больших параллельных HTTP POST в приложении ASP.NET - PullRequest
6 голосов
/ 30 марта 2012

Страница клиента использует 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.

1 Ответ

1 голос
/ 09 апреля 2012

Ваш обработчик ashx написан для асинхронного выполнения? Если нет, то это отличная статья для реализации асинхронных обработчиков ashx:

http://msdn.microsoft.com/en-us/magazine/cc163463.aspx

...