Тайм-ауты ReportViewer, несмотря на настройки тайм-аута - PullRequest
18 голосов
/ 01 сентября 2011

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

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

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

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

Отменено

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

[Прервать эту ошибку] ​​this._endPostBack (this._cr ... anagerTimeoutError (), sender, null);

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

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

И в IIS> мой сайт> Расширенные настройки> Пределы подключения я установил для параметра «Время ожидания подключения (секунды)» значение 1200. Все это не имело значения.

Кто-нибудь знает, чего мне не хватает?

Ответы [ 3 ]

16 голосов
/ 29 августа 2013

установить значение AsyncPostBackTimeOut = "" в диспетчере скриптов

   <asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeOut="56000" >
</asp:ScriptManager>

для более подробной информации http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.asyncpostbacktimeout.aspx

12 голосов
/ 02 сентября 2011

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

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

6 голосов
/ 15 января 2014

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

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

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

ВSite.Master set AsyncPostBackTimeout = "56000":

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