Подтвердить что ты не робот

Тайм-ауты ReportViewer, несмотря на настройки тайм-аута

У меня есть приложение ASP.NET, которое предоставляет Microsoft ReportViewer (фактически приложение MVC3 с одним WebForm, на котором размещается ReportViewer). При запуске больших отчетов происходит тайм-аут, заставляющий запрос останавливаться, а пустая страница - вместо отчета. Однако следующие параметры таймаута задаются программно:

Viewer.ServerReport.Timeout = Configuration.ReportViewerTimeout;
ScriptManager.AsyncPostBackTimeout = Configuration.ReportViewerAjaxTimeout;

Соответствующие значения равны -1 и 0, которые согласно документации интерпретируются как отсутствие таймаута. Я также пробовал большие значения, это не имело значения.

Примерно через минуту или в ожидании загрузки сообщения ( "Загрузка" ) я получаю пустой отчет, и я вижу это в окне консоли Firebug:

Прерванный

Sys.WebForms.PageRequestManagerTimeoutException: время ожидания запроса сервера.

[Break On This Error] this._endPostBack (this._cr... anagerTimeoutError(), отправитель, null);

Я также попытался добавить это в свой web.config:

<httpRuntime maxRequestLength="1024000" executionTimeout="999999" /> 

И в IIS > моем сайте > Дополнительные настройки > Ограничения подключения Я установил "Время ожидания подключения (в секундах)" до 1200. Все это не имело значения.

Кто-нибудь знает, чего я не могу потерять?

4b9b3361

Ответ 1

Оказывается, что ответ таков: на самом деле ничего не пропало!

Как это бывает, значение тайм-аута ScriptManager не сохраняется в ViewState (в отличие от значения тайм-аута ReportViewer), и код только устанавливал его один раз внутри блока if (!PostBack). Исправлено установкой свойства ScriptManager AsyncPostBackTimeout при каждом запросе (даже после обратной передачи). Альтернативой является установка его фиксированного значения с помощью конструктора Visual Studio WebForm.

Ответ 3

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

В web.config для сайта установите executeTimeout = "10800":

 <httpRuntime maxRequestLength="2147483647" executionTimeout = "10800"/>

В Site.Master установите AsyncPostBackTimeout = "56000":

 <asp:ToolkitScriptManager ID="smMaster" runat="server" AsyncPostBackTimeout="56000" />