Предотвращение времени ожидания браузера при загрузке больших файлов - PullRequest
9 голосов
/ 22 октября 2008

У меня есть небольшой симпатичный элемент управления загрузкой файлов, который я написал для веб-форм ASP.NET, использующий IFrame и ASP.NET AJAX.

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

Есть ли способ, как я могу увеличить это?

Мне не очень интересны альтернативные решения, поэтому, пожалуйста, не предлагайте менять все целиком. Он работает хорошо для загрузок <5 мегабайт, я просто хотел бы получить его до 8 МБ. </p>

РЕДАКТИРОВАТЬ: установка времени ожидания в Page_Load, похоже, ничего не меняет.

Ответы [ 7 ]

10 голосов
/ 23 октября 2008

Вам необходимо обновить настройку метабазы ​​в IIS6 и более поздних версиях. Ключ «AspMaxRequestEntityAllowed» и выражается в байтах. Я настоятельно рекомендую внести изменения в обозреватель метабазы, хотя возможен просмотр XML в% systemroot% \ system32 \ inetserv \ metabase.xml.

Исследователь метабазы: http://support.microsoft.com/kb/840671

Хммм, возможно, я лаю не на том дереве ... вы бы не занялись 5 МБ файлами, если бы это не было уже настроено.

Еще одно замечание: посмотрите ваш web.config:

<system.web>
  <httpRuntime  maxRequestLength="10240" executionTimeout="360"/>
</system.web>

Максимальная длина запроса в килобайтах, а время ожидания в секундах.

3 голосов
/ 22 июля 2010

Поместите это в ваш web.config

  <system.web>
     <httpRuntime executionTimeout="360" maxRequestLength="100000" />

Это обеспечивает 360-секундный тайм-аут и 100 000 Кбайт загружаемых данных одновременно.

Если это не сработает, запустите эту команду на своем сервере IIS. (заменить [IISWebsitename])

C:\Windows\System32\inetsrv>appcmd set config "[IISWebsitename]" -section:requestFiltering -requestLimits.maxAllowedContentLength:100000000 -commitpath:apphost

Это позволяет одновременно загружать 100 000 000 байт данных.

2 голосов
/ 22 октября 2008

В Page_Load установите для Server.ScriptTimeout значение, которое вам подходит. Измеряется в секундах, я полагаю.

1 голос
/ 03 февраля 2016

Откройте файл Web.config и чуть ниже тега <system.web> добавьте следующий тег:

<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />

Теперь просто взгляните на атрибут maxRequestLength = "4096" тега <httpRuntime>. Как вы, наверное, поняли, все, что вам нужно сделать, это изменить значение на другое значение по вашему выбору (8192 для 8 МБ, 16384 для 16 МБ, 65536 для 64 МБ и т. Д.).

1 голос
/ 23 октября 2008

Я думаю, вам может понадобиться настроить MaxRequestLength

Это в Web.config Я думаю, по умолчанию его 4megs.

Следующее позволит ~ 10 мегабайт файла:

<httpRuntime maxRequestLength="10240" />
0 голосов
/ 07 марта 2011

Я решил это, используя PHP с HTML:

  1. Я начинаю сеанс
  2. войти в цикл
  3. создать цикл, который перезагружает страницу, которая выполняет часть работы за время
  4. делай, пока работа не закончится
  5. код внутри цикла выполняет часть работы
  6. увеличить переменную сеанса так, чтобы она указывала на следующую часть задания
  7. перезагрузить страницу, используя скрипт java // это перезапустит серверы таймер страницы
  8. цикл
  9. загрузить страницу, чтобы сообщить, что работа выполнена
0 голосов
/ 02 декабря 2008

Проверьте код Velodoc XP Edition . Он включает модуль потоковой передачи, обработчик возобновляемой загрузки и элементы управления загрузкой ASP.NET, основанные на расширениях ASP.NET Ajax, и все это с открытым исходным кодом.

Для получения дополнительной информации проверьте также www.memba.com и www.velodoc.com .

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