Загрузка файла ASP.NET останавливает все остальные запросы на веб-сайте - PullRequest
7 голосов
/ 09 сентября 2011

У нас есть веб-портал, на котором есть страница, позволяющая пользователям загружать до 5 файлов одновременно.На странице всего 5 стандартных элементов управления ASP.NET FileUpload.

Проблема в том, что мы видим, что когда пользователь загружает файлы, он останавливает все остальные действия на сайте.В течение 1-2 минут загрузки мы видим, что запросы начинают стоять в очереди, а пропускная способность падает до нуля.Как только файлы заканчивают загружаться, все возобновляется.(Мы используем New Relic, чтобы показать нам, что происходит)

Мы не имеем дело с часто используемой функцией, и загружаемые файлы невелики.Тем не менее, мы видели загрузку 4 файлов размером около 70 КБ каждый.

Некоторые исследования привели меня к этому сообщению в блоге .К сожалению, продукт, который они продают, требует Server 2008 и IIS7, а клиент имеет 2003 и IIS6.Кроме того, просто не похоже, что 4 крошечные загрузки должны иметь такой эффект.

Итак, кто-нибудь еще сталкивался с этой ситуацией или знал что-то, что могло быть сделано неправильно, чтобы вызвать эту проблемув таком маленьком масштабе?Может быть, есть неправильные настройки пула приложений или web.config, на которые мы должны обратить внимание, что может снизить пропускную способность?

Ответы [ 5 ]

1 голос
/ 19 сентября 2011

Попробуйте использовать делегаты для асинхронной загрузки.Это может помочь.

0 голосов
/ 16 декабря 2011
  1. http://www.uploadify.com/
    • позволяет загружать один или несколько файлов. Каждый файл будет отправлен ->

-> 2. Общий веб-обработчик - Здесь вы можете проверить размер, расширение, где хранить и т.д. ...

  1. После завершения загрузки ответьте на некоторые сообщения msg / do.

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

0 голосов
/ 30 ноября 2011

если вы используете серверный элемент управления asp fileupload, добавьте этот код в web.config

<httpRuntime
executionTimeout="110"
maxRequestLength="4096"
requestLengthDiskThreshold="80"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="5000"
enableKernelOutputCache="true"
enableVersionHeader="true"
requireRootedSaveAsPath="true"
enable="true"
shutdownTimeout="90"
delayNotificationTimeout="5"
waitChangeNotification="0"
maxWaitChangeNotification="0"
enableHeaderChecking="true"
sendCacheControlHeader="true"
apartmentThreading="false" />`

просто изменить executionTimeout="110" maxRequestLength="4096"

0 голосов
/ 28 октября 2011

При вероятности того, что, когда вы говорите, что все другие действия на сайте прекращаются, оказывается, что только на клиентах, которые выполняют загрузку (РЕДАКТИРОВАТЬ: я вижу, что вы указали иначе в комментарии), и если вам не нужно записывать данные в Session во время загрузки, решение будет простым: измените страницу / обработчик / WebMethod, которая принимает загрузку, чтобы она не могла записывать в Session, следующим образом.

  • Для страницы добавьте EnableSessionState="false" или EnableSessionState="ReadOnly" к директиве @ Page.
  • Для универсального обработчика удалите IRequiresSessionState из объявления класса или замените его на IReadOnlySessionState.
  • Для WebMethod используйте свойство EnableSession атрибута WebMethod : [System.Web.Services.WebMethod(EnableSession=false)]
0 голосов
/ 24 октября 2011

Почему бы вам не попробовать поместить элементы управления загрузкой в ​​панель обновлений?Я думаю, что обработать запрос на загрузку отдельно.Дайте мне знать, если это работает.

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