2011-09-01 48 views
16

Tengo una aplicación ASP.NET que expone un Microsoft ReportViewer (en realidad una aplicación MVC3 con un WebForm alojando el ReportViewer). Cuando se ejecutan informes grandes, se produce un tiempo de espera que provoca que la solicitud se detenga y se muestre una página en blanco en lugar de un informe. Sin embargo, los siguientes parámetros de tiempo de espera se establecen mediante programación:Tiempos de espera de ReportViewer a pesar de la configuración de tiempo de espera

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

Los valores respectivos son -1 y 0, que según la documentación se interpretan como sin tiempo de espera. También probé valores grandes, no hizo ninguna diferencia.

Después de aproximadamente un minuto más o menos a la espera del informe de cargar ("Carga" cuadro de mensaje), aparece un informe en blanco y veo esto en mi Firebug ventana de la consola:

abortada

Sys.WebForms.PageRequestManagerTimeoutException: la solicitud del servidor agotó el tiempo de espera.

[Romper en este error] this._endPostBack (this._cr ... anagerTimeoutError(), remitente, nulo);

También probé añadiendo esto a mi web.config:

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

Y en IIS> mi sitio> Configuración avanzada> Límites de conexión puse "Conexión Tiempo de espera (segundos)" 1200. Todo esto no hizo diferencia.

¿Alguien sabe lo que me podría estar perdiendo?

Respuesta

11

Resulta que la respuesta es: ¡en realidad no falta nada!

Como sucede, el valor de tiempo de espera de ScriptManager no se conserva en ViewState (a diferencia del valor de tiempo de espera del ReportViewer) y el código solo lo configuró una vez dentro de un bloque if (!PostBack). Se solucionó al establecer la propiedad AsyncPostBackTimeout de ScriptManager en cada solicitud (incluso devoluciones). Una alternativa es establecerlo en un valor fijo utilizando el diseñador Visual Studio WebForm.

6

Adición de dos de los ajustes de configuración mencionados anteriormente hizo el truco para mí.

En el web.config para el sitio establezca la executionTimeout = "10800":

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

En el Site.Master establecer AsyncPostBackTimeout = "56000":

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