Microsoft ReportViewer:会话过期错误

时间:2008-10-07 14:04:37

标签: session reportviewer

该项目是ASP.NET 2.0,我自己从来没有能够重现这一点,但我收到的电子邮件告诉我,它每周发生在客户身上很多次,通常是连续几次。

以下是完整错误:

异常详细信息:

  

Microsoft.Reporting.WebForms.AspNetSessionExpiredException:ASP.NET会话已过期

堆栈追踪:

  

[AspNetSessionExpiredException:ASP.NET会话已过期]      在Microsoft.Reporting.WebForms.ReportDataOperation..ctor()      在Microsoft.Reporting.WebForms.HttpHandler.GetHandler()      在Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext context)      在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()      在System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)   会话对象:75de8e1d65ff40d1ba666d940af5b118:Microsoft.Reporting.WebForms.ReportHierarchy   5210064be1fa4d6abf5dd5e56b262974:Microsoft.Reporting.WebForms.ReportHierarchy

7 个答案:

答案 0 :(得分:11)

我们遇到了同样的问题。到目前为止,我们只在会话到期时才找到它,但是他们在浏览器中使用了后退按钮来执行激进的缓存,这很好。但即使主页没有,ReportViewer也试图刷新。所以,我们刚刚添加了一些hacky 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);
    }
}

答案 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 :(得分:2)

这是我的修复。

在Web场上运行IIS,每个场的Web园计数= 3,

我只为sql报告创建了一个单独的应用程序池,并为此报告池设置了web gardern count = 1。

然后,在IIS中创建一个虚拟目录,并使用该报告池创建一个单独的报告项目

问题解决了。

答案 3 :(得分:1)

我在自己的电脑上进行开发时遇到了这个问题,无法在网络上找到答案。事实证明,我的一个队友将其添加到了web.config:

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

因此开发人员桌面上的web.config不应该有标签,DEV / QAS和Prod web.config文件应该有。

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

答案 4 :(得分:0)

问题是什么?会议已过期,无法继续。

检查报告处理速度。建立某种基准或只是要求他们衡量报告处理。

很容易就是它适合你,但不适合它们(网络速度慢,需要处理更多数据,数据库服务器速度慢等)。

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

答案 5 :(得分:0)

web gardern count=1适合我

答案 6 :(得分:0)

检查应用程序池的最大工作进程数, 因为工作进程的 Asp NET Session 是不同的。

如果您有 1 个以上的工作进程进程内会话状态,那么每个进程都有自己的会话。

会话状态类型

  1. 进程内:会话状态存储在工作进程中 ASP.NET 应用程序运行。
  2. 状态服务器:存储会话状态 在 ASP.NET 应用程序运行的工作进程之外。
  3. SQL Server:会话状态存储在 SQL Server 数据库中。