У меня есть веб-приложение ASP.NET MVC2, работающее с SQL Server 2008 R2, работающее с IIS 6.2. У меня есть функция, в которой одному конкретному администратору необходимо загрузить около 5000 документов, которые затем обрабатываются и сохраняются на сервере, а их имена сохраняются в базе данных.
Проблема в том, что на стороне клиента через 10 минут после начала загрузки файла я получаю: Error 504 Timeout, Gateway Timeout. Я изменил значение httpRuntime.ExecutionTimeout в web.config, но это не решило проблему.
Кто-нибудь знает, где хранится ограничивающая меня ценность?
Вот мой файл web.config: http://pastebin.com/VXs0BFTp
РЕДАКТИРОВАТЬ: Кроме того, после получения ошибки 504 хранилище данных в базе данных все равно продолжает работать.
Из вашего описания кажется, что время ожидания соединения ваш клиент -> веб-сервер, скорее всего, связано с использованием прокси. Если ваш сервер обрабатывает файлы более 10 минут, ваш клиент не получает своевременного ответа, но веб-сервер может обрабатывать дальше.
httpRuntime.ExecutionTimeout указывает, сколько потоку IIS разрешено обрабатывать запрос перед завершением работы, поэтому он не должен иметь никакого влияния на вашу проблему.
Если вы не можете оптимизировать обработку файлов на стороне сервера, я предлагаю изменить дизайн. Один из возможных способов - загрузить все файлы, как можно скорее ответить клиенту и выполнить обработку асинхронно. Конечно, пользовательский интерфейс клиента должен быть изменен, чтобы иметь возможность отображать статус обработки (например, в процентах).
Если процесс загрузки занимает слишком много времени (то есть минут), решением может быть то, что администратор перенесет файлы в сетевое расположение и после этого начнет обработку (веб-сервер должен иметь права на чтение из этого места). Это не очень удобно, но администраторы не являются обычными пользователями.