2011-09-01 2 views
16

Ho un'app ASP.NET che espone un Microsoft ReportViewer (in realtà un'app MVC3 con un Web Form che ospita il ReportViewer). Quando si eseguono report di grandi dimensioni, si verifica un timeout che provoca l'interruzione della richiesta e la visualizzazione di una pagina vuota al posto di un report. Tuttavia i seguenti parametri di timeout sono impostati al livello di programmazione:Timeout di ReportViewer nonostante le impostazioni di timeout

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

I rispettivi valori sono -1 e 0 che secondo documentazione vengono interpretati come nessun timeout. Ho anche provato grandi valori, non ha fatto differenza.

Dopo circa un minuto o giù di lì in attesa sulla relazione per caricare (finestra di messaggio "Loading"), ottengo un report vuoto e vedo questo nel mio Firebug finestra della console:

Interrotto

Sys.WebForms.PageRequestManagerTimeoutException: la richiesta del server è scaduta.

[Break On This Error] this._endPostBack (this._cr ... anagerTimeoutError(), sender, null);

Ho anche provato ad aggiungere questo al mio web.config:

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

E in IIS> sito> Impostazioni avanzate> limiti di connessione I set "timeout di connessione (secondi)" a 1200. Tutto ciò non ha fatto differenza.

Qualcuno sa cosa potrei mancare?

risposta

11

Risulta che la risposta è: in realtà non manca nulla!

In questo caso, il valore di timeout di ScriptManager non viene mantenuto in ViewState (a differenza del valore di timeout di ReportViewer) e il codice lo ha impostato solo una volta all'interno di un blocco if (!PostBack). Risolto il problema impostando la proprietà AsyncPostBackTimeout di ScriptManager ad ogni richiesta (anche i postback). Un'alternativa è impostarla su un valore fisso utilizzando la finestra di progettazione di Visual Studio WebForm.

6

Aggiungendo due delle impostazioni di configurazione di cui sopra ha fatto il trucco per me.

nel web.config per il sito impostare l'executionTimeout = "10800":

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

Nel Site.master set AsyncPostBackTimeout = "56000":

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