Тайм-аут запроса IIS при длительной работе ASP.NET - PullRequest
79 голосов
/ 30 сентября 2010

Я испытываю тайм-аут запроса от IIS, когда я выполняю длинную операцию. За кулисами мое приложение ASP.NET обрабатывает данные, но количество обрабатываемых записей велико, поэтому операция занимает много времени.

Тем не менее, я думаю, что IIS прервал сессию. Это проблема с сеансом IIS или ASP.NET?

Заранее спасибо

Ответы [ 4 ]

138 голосов
/ 30 сентября 2010

Если вы хотите продлить время, отведенное для выполнения сценария ASP.NET, увеличьте значение 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:

<!-- 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:

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

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

Другая альтернатива, если у вас есть доступ администратора к серверу, - это рассмотреть эту длительную операцию в качестве кандидата для реализации в качестве запланированной задачи или службы Windows.

20 голосов
/ 01 февраля 2015

Отличный и исчерпывающий ответ @Kev!

Поскольку я выполнял длительную обработку только на одной странице администратора в приложении WebForms, я использовал параметр кода.Но чтобы разрешить временное быстрое исправление на производстве, я использовал версию конфигурации в теге <location> в web.config.Таким образом, моя страница администратора / обработки получила достаточно времени, в то время как страницы для конечных пользователей и тому подобное сохранили свое прежнее поведение.

Ниже я дал конфигурацию для вас, Googlers, нуждающихся в таком же быстром исправлении.Конечно, вы должны использовать другие значения, кроме моего примера «4 часа», но DO обратите внимание, что сеанс timeOut идет в минутах, а запрос executionTimeout в секундах!

И- поскольку уже 2015 год - для не-быстрого исправления вы должны использовать async / await .Net 4.5 сейчас, если это вообще возможно, вместо страницы ASYNC .NET 2.0, которая была современнойкогда КЕВ ответил в 2010 году:).

<configuration>
    ... 
    <compilation debug="false" ...>
    ... other stuff ..

    <location path="~/Admin/SomePage.aspx">
        <system.web>
            <sessionState timeout="240" />
            <httpRuntime executionTimeout="14400" />
        </system.web>
    </location>
    ...
</configuration>
7 голосов
/ 19 июня 2017

Я публикую это здесь, потому что я потратил на это 3 и 4 часа, и я нашел только ответы, подобные тем, что приведены выше, например, добавить executionTime, но это не помогает проблема в том случае, если вы используете ASP .NET Core . Для этого это будет работать:

В файле web.config добавьте атрибут requestTimeout в узле aspNetCore.

<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

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

Удалить ~ символ в локации так

path="~/Admin/SomePage.aspx"

становится

path="Admin/SomePage.aspx"
...