Microsoft ReportViewerを公開するASP.NETアプリがあります(実際には、ReportViewerをホストする1つのWebフォームを備えたMVC3アプリ)。大きなレポートを実行すると、タイムアウトが発生してリクエストが停止し、レポートの代わりに空白のページが表示されます。ただし、次のタイムアウトパラメータはプログラムで設定されます。
Viewer.ServerReport.Timeout = Configuration.ReportViewerTimeout;
ScriptManager.AsyncPostBackTimeout = Configuration.ReportViewerAjaxTimeout;
それぞれの値は-1と0であり、ドキュメントによると、タイムアウトなしとして解釈されます。私も大きな値を試しましたが、違いはありませんでした。
レポートが読み込まれるのを約1分ほど待った後(「読み込み中」メッセージボックス)、空白のレポートが表示され、Firebugコンソールウィンドウに次のように表示されます。
中止
Sys.WebForms.PageRequestManagerTimeoutException:サーバー要求がタイムアウトしました。
[このエラーの中断] this._endPostBack(this._cr ... anagerTimeoutError()、sender、null);
また、これをweb.configに追加してみました。
<httpRuntime maxRequestLength="1024000" executionTimeout="999999" />
そして、IIS>私のサイト>詳細設定>接続制限]で「接続タイムアウト(秒)」を1200に設定しました。これはすべて違いはありませんでした。
誰かが私が欠けている可能性があるものを知っていますか?
答えは次のとおりです。実際には何も欠けていません。
たまたま、ScriptManagerのタイムアウト値は(ReportViewerのタイムアウト値とは異なり)ViewStateに保持されず、コードはif (!PostBack)
ブロック内で一度だけ設定していました。各リクエスト(ポストバックも含む)でScriptManagerのAsyncPostBackTimeoutプロパティを設定することで修正されました。別の方法は、Visual StudioWebFormデザイナーを使用して固定値に設定することです。
スクリプトマネージャでAsyncPostBackTimeOut = ""値を設定します
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeOut="56000" >
</asp:ScriptManager>
詳細については http://msdn.Microsoft.com/en-us/library/system.web.ui.scriptmanager.asyncpostbacktimeout.aspx
上記の構成設定を2つ追加することで、うまくいきました。
サイトのweb.configで、executionTimeout = "10800"を設定します。
<httpRuntime maxRequestLength="2147483647" executionTimeout = "10800"/>
Site.MasterでAsyncPostBackTimeout = "56000"を設定します:
<asp:ToolkitScriptManager ID="smMaster" runat="server" AsyncPostBackTimeout="56000" />