2011-09-01 41 views
16

Tôi có một ứng dụng ASP.NET hiển thị Microsoft ReportViewer (thực sự là một ứng dụng MVC3 với một WebForm lưu trữ ReportViewer). Khi chạy báo cáo lớn, thời gian chờ xảy ra khiến yêu cầu dừng và trang trống hiển thị thay cho báo cáo. Tuy nhiên, các thông số thời gian chờ sau được đặt theo chương trình:Thời gian chờ ReportViewer mặc dù cài đặt hết thời gian

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

Giá trị tương ứng là -1 và 0 theo tài liệu được hiểu là không hết giờ. Tôi cũng đã thử các giá trị lớn, nó không có sự khác biệt.

Sau khoảng một phút hoặc lâu hơn chờ đợi trên báo cáo để nạp ("Đang tải" hộp tin nhắn), tôi nhận được một báo cáo trống và tôi thấy điều này trong giao diện điều khiển cửa sổ Firebug của tôi:

Aborted

Sys.WebForms.PageRequestManagerTimeoutException: Yêu cầu máy chủ đã hết thời gian chờ.

[Break On This Error] this._endPostBack (this._cr ... anagerTimeoutError(), người gửi, null);

Tôi cũng đã cố gắng này thêm vào web.config của tôi:

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

Và trong IIS> trang web của tôi> Advanced Settings> giới hạn kết nối tôi đặt "Kết nối Time-out (giây)" 1200. Tất cả điều này không có sự khác biệt.

Có ai biết tôi có thể bỏ lỡ điều gì không?

Trả lời

11

Hóa ra câu trả lời là: Thực sự không có gì thiếu!

Khi điều đó xảy ra, giá trị thời gian chờ của ScriptManager không được duy trì trong ViewState (không giống như giá trị hết giờ của ReportViewer) và mã chỉ được đặt một lần trong khối if (!PostBack). Cố định bằng cách thiết lập thuộc tính AsyncPostBackTimeout của ScriptManager tại mỗi yêu cầu (thậm chí postbacks). Một giải pháp thay thế là đặt nó thành một giá trị cố định bằng cách sử dụng trình thiết kế Visual Studio WebForm.

6

Thêm hai trong số các thiết lập cấu hình nêu trên đã làm các trick cho tôi.

Trong web.config cho trang web thiết lập các executionTimeout = "10800":

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

Trong Site.Master thiết AsyncPostBackTimeout = "56000":

<asp:ToolkitScriptManager ID="smMaster" runat="server" AsyncPostBackTimeout="56000" /> 
Các vấn đề liên quan