Тайм-аут запроса IIS при длительной работе ASP.NET
У меня возникает тайм-аут запроса от IIS, когда я запускаю длительную операцию. За сценой мое приложение ASP.NET обрабатывает данные, но количество обрабатываемых записей велико, и, следовательно, операция занимает много времени.
Тем не менее, я думаю, что IIS время сеанса. Это проблема с сеансом IIS или ASP.NET?
Заранее спасибо
Ответы
Ответ 1
Если вы хотите увеличить время, разрешенное для выполнения сценария ASP.NET, Server.ScriptTimeout
значение Server.ScriptTimeout
. Значение по умолчанию составляет 90 секунд для.NET 1.x и 110 секунд для.NET 2.0 и более поздних версий.
Например:
// Increase script timeout for current page to five minutes
Server.ScriptTimeout = 300;
Это значение также можно настроить в файле web.config
в httpRuntime
конфигурации httpRuntime
:
<!-- Increase script timeout to five minutes -->
<httpRuntime executionTimeout="300"
... other configuration attributes ...
/>
![enter image description here]()
Обратите внимание, что в соответствии с документацией MSDN:
"Этот тайм-аут применяется только в том случае, если атрибут debug в элементе компиляции False. Поэтому, если атрибут debug имеет значение True, вам не нужно устанавливать этот атрибут в большое значение, чтобы избежать выключения приложения во время отладки. "
Если вы уже это сделали, но обнаруживаете, что срок действия вашего сеанса истекает, увеличьте значение ASP.NET HttpSessionState.Timeout
:
Например:
// Increase session timeout to thirty minutes
Session.Timeout = 30;
Это значение также можно настроить в файле web.config
в sessionState
конфигурации sessionState
:
<configuration>
<system.web>
<sessionState
mode="InProc"
cookieless="true"
timeout="30" />
</system.web>
</configuration>
Если ваш сценарий занимает несколько минут, и есть много одновременных пользователей, тогда подумайте об изменении страницы на асинхронной странице. Это увеличит масштабируемость вашего приложения.
Другая альтернатива, если у вас есть доступ администратора к серверу, заключается в том, чтобы рассматривать эту долговременную работу как кандидата для реализации в качестве запланированной задачи или службы Windows.
Ответ 2
Великий и исчерпывающий ответ на вопрос @Kev!
Поскольку я долго обрабатывал только одну страницу администратора в приложении WebForms, я использовал опцию кода. Но чтобы разрешить временное быстрое исправление при производстве, я использовал конфигурационную версию в теге <location>
в web.config. Таким образом, моя страница администрирования/обработки получила достаточно времени, в то время как страницы для конечных пользователей и т.д. Сохраняли прежнее поведение.
Ниже я дал конфигурацию для вас, Гуглеров, нуждающихся в том же быстром решении. Вы должны использовать другие значения, чем мой пример "4 часа", но DO обратите внимание, что сеанс timeOut
находится в минутах, а запрос executionTimeout
- в секундах!
И - начиная с 2015 года - для NON-quickfix вы должны использовать .Net 4.5 async/await, если это вообще возможно, вместо .NET 2.0 ASYNC, которая была в современном состоянии, когда KEV ответил в 2010 году:).
<configuration>
...
<compilation debug="false" ...>
... other stuff ..
<location path="~/Admin/SomePage.aspx">
<system.web>
<sessionState timeout="240" />
<httpRuntime executionTimeout="14400" />
</system.web>
</location>
...
</configuration>
Ответ 3
Я размещаю это здесь, потому что я потратил на это 3 и 4 часа, и я нашел ответы только на тех, которые выше, которые говорят, добавьте executionTime
, но это не решает проблема в том случае, если вы используете ASP.NET Core. Для этого это сработало бы:
В файле web.config добавьте атрибут requestTimeout
в aspNetCore
node.
<system.webServer>
<aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>
В этом примере я устанавливаю значение в течение 10 минут.
Ссылка: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module
Ответ 4
Удалите символ ~
в местоположении
так
path="~/Admin/SomePage.aspx"
становится
path="Admin/SomePage.aspx"