2008-10-07 32 views
19

Dự án là ASP.NET 2.0, tôi chưa bao giờ có thể tự tái sản xuất, nhưng tôi nhận được email thông báo cho tôi rằng nó xảy ra với khách hàng nhiều lần trong tuần, thường là vài lần liên tiếp.Microsoft ReportViewer: Session Expired Errors

Dưới đây là toàn bộ lỗi:

Ngoại lệ chi tiết:

Microsoft.Reporting.WebForms.AspNetSessionExpiredException: ASP.NET session has expired

Stack Trace:

[AspNetSessionExpiredException: ASP.NET session has expired] at Microsoft.Reporting.WebForms.ReportDataOperation..ctor() at Microsoft.Reporting.WebForms.HttpHandler.GetHandler() at Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) Session Objects:75de8e1d65ff40d1ba666d940af5b118: Microsoft.Reporting.WebForms.ReportHierarchy 5210064be1fa4d6abf5dd5e56b262974: Microsoft.Reporting.WebForms.ReportHierarchy

Trả lời

11

Chúng tôi đã có cùng một vấn đề. Cho đến nay, chúng tôi chỉ tìm thấy nó khi phiên hết hạn nhưng họ đã sử dụng nút quay lại trong trình duyệt có bộ nhớ đệm tích cực, điều này là tốt. Nhưng ReportViewer đã cố gắng làm mới ngay cả khi trang chính không. Vì vậy, chúng ta chỉ cần thêm một số xử lý lỗi Global.asax hacky:

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception exc = Server.GetLastError().GetBaseException(); 
    if (exc is Microsoft.Reporting.WebForms.AspNetSessionExpiredException) 
    { 
     Server.ClearError(); 
     Response.Redirect(FormsAuthentication.LoginUrl + "?ReturnUrl=" + HttpUtility.UrlEncode(Request.Url.PathAndQuery), true); 
    } 
} 
+0

Tôi đã thử mã này trong ứng dụng asp.net mvc 2. nhưng phương pháp này không được gọi. – loviji

+0

@loviji: Bạn đang sử dụng ReportViewer trong MVC như thế nào? Nó là một điều khiển WebForms ... Bất kể, Application_Error trong Global.asax nên làm việc cho tất cả các trang web ASP.Net. Tra cứu cách sử dụng đúng và thiết lập phương thức Application_Error đặc biệt trong ASP.NET - có rất nhiều trợ giúp trên web về cách thực hiện điều đó. –

+0

cảm ơn điều này đã giúp giải quyết vấn đề của tôi –

0

câu hỏi là gì? Phiên đã hết hạn và họ không thể tiếp tục.

Kiểm tra tốc độ xử lý báo cáo. Xây dựng trong một số loại điểm chuẩn hoặc chỉ yêu cầu họ đo lường việc xử lý báo cáo.

Dễ dàng có thể là nó đang làm việc cho bạn, nhưng không phải cho họ (mạng chậm hơn, nhiều dữ liệu hơn để xử lý, máy chủ DB chậm hơn, v.v.).

Chỉnh sửa:Here is một giải pháp khác và có thể là giải pháp cho vấn đề, nhưng tôi không nhớ để đặt số quy trình công nhân thành 1 trên môi trường procudtion.

3

phiên Timeout

này có thể là do thời gian chờ phiên của bạn quá thấp. Xem phần "sessionState" trong Web.Config của bạn, ví dụ: : -

<system.web><sessionState mode="InProc" timeout="60" /></system.web> 

Điều này sẽ đặt thời gian chờ của phiên là 60 phút.

Application Pool Recycle

Một nguyên nhân có thể, và một trong đó chúng tôi chạy vào, đó là hồ bơi ứng dụng của bạn đang được tái chế đối với một số lý do.

Trong trường hợp ngoại lệ là do chúng tôi đã đạt đến cài đặt "Bộ nhớ ảo tối đa", tôi đã tăng cường tính năng đó và mọi thứ vẫn ổn.

Hãy xem trong Nhật ký sự kiện hệ thống của bạn cho 1010, 1011, 1074, 1077, 1078, 1079, 1080 và 1117 sự kiện từ W3SVC và xem hồ bơi ứng dụng của bạn có đang được tái chế hay không.

2

Đây là bản sửa lỗi của tôi.

Chạy IIS trên một nông trang web, và mỗi trang trại có một số vườn web = 3 mỗi,

Tôi chỉ đơn giản là tạo ra một hồ bơi ứng dụng riêng biệt chỉ dành riêng cho báo cáo sql và thiết lập web mà gardern count = 1 chỉ dành riêng cho báo cáo này hồ bơi.

sau đó, tạo một thư mục ảo trong IIS và một dự án riêng biệt để báo cáo - sử dụng báo cáo đó

vấn đề được giải quyết.

0

web gardern count=1 trình cho tôi

1

Tôi có vấn đề này khi phát triển trên máy tính của riêng tôi và không thể tìm thấy một câu trả lời bất cứ nơi nào trên mạng. Hóa ra là một trong những đồng đội của tôi thêm này vào web.config:

<httpCookies httpOnlyCookies="false" requireSSL="true" /> 

Vì vậy, các web.config trên desktop của nhà phát triển không nên có thẻ và DEV/QAS và các tập tin web.config Prod nên có nó.

Tôi cũng hiểu rằng các nhà phát triển có thể sử dụng IIS Express và sau đó họ có thể sử dụng SSL cục bộ.

Các vấn đề liên quan