2008-10-07 72 views
19

该项目是ASP.NET 2.0,我从来没有能够自己重现这一点,但我收到的电子邮件通知我发生这种情况,一周多次发生,通常连续几次。微软ReportViewer:会话过期错误

以下是完整的错误:

异常详细信息:

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

堆栈跟踪:

[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

回答

11

我们遇到了同样的问题。到目前为止,我们只在会话过期时才发现它,但他们在浏览器中使用后退按钮来进行积极缓存,这很好。但ReportViewer试图刷新,即使主页没有。所以,我们只是增加了一些哈克的Global.asax错误处理:

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

我在asp.net mvc 2应用程序中试过这段代码。但是这个方法没有被调用。 – loviji 2012-03-02 14:39:54

0

问题是什么?会话过期了,他们无法继续。

检查报告处理速度。建立某种基准或简单地要求他们测量报告处理。很容易可以是它为你工作,但不是为他们(网络速度较慢,需要处理更多的数据,较慢的数据库服务器等等)。

编辑:Here is另一解释,也许是问题的解决方案,但我不建议在procudtion环境中将工作进程号设置为1。

3

会话超时

这可能是由于您的会话超时太低。查看Web.Config的“sessionState”部分,例如: -

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

这会将会话超时设置为60分钟。

应用程序池回收

另一个可能的原因,以及一个我们碰到了,那是你的应用程序池被回收的某些原因。

在出现这种情况时,是因为我们打了“最大虚拟内存”设置,所以我刚刚提高了这一点,一切都很顺利。

查看您的系统事件日志中是否存在来自W3SVC的1010,1011,1074,1077,1078,1079,1080和1117事件,并查看您的应用程序池是否正在循环使用,如果是,应该说明原因。

2

这是我的修复程序。

在Web场上运行IIS,每个农场有一个Web园数=各3只,

我只是做了一个单独的应用程序池只为SQL报告和设置网络gardern数= 1只为这报告池。

然后,由在IIS虚拟目录和报告的一个单独的项目 - 使用报告池

问题就迎刃而解了。

0

web gardern count=1对我的作品

1

我在我自己的电脑上进行开发时,有这个问题,无法在网络上的任何地方找到答案。原来,我的一个队友已将此添加到web.config中:

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

所以开发人员的桌面上web.config不应该有标签和DEV/QAS和PROD web.config文件中应该有它。

我也明白开发人员可以使用IIS Express,然后他们可以在本地使用SSL。