该项目是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
答案 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 个以上的工作进程和进程内会话状态,那么每个进程都有自己的会话。
会话状态类型