C# ASP.NET会话已过期-事件Id 1309

C# ASP.NET会话已过期-事件Id 1309,c#,asp.net,iis-6,.net-4.0,session-timeout,C#,Asp.net,Iis 6,.net 4.0,Session Timeout,一些简短的细节: 我正在IIS6上运行ASP.NET4.0.30319.0。我已经主持了一个包含ReportViewer的网站很长一段时间了(大约3年)。四月份,我升级到了4.0运行时,事情平稳地运行了几个月 现在,我突然发现托管ReportViewer的页面上出现了相当多的会话超时异常。事件查看器记录了许多这样的事件,当它真正能够查看页面时,它是命中或未命中的。点击页面一次,就可以看到生成的报告。刷新,则会发生错误。再次刷新,它将返回 我浏览了很多论坛,试图找出问题所在——大多数论坛似乎建议更

一些简短的细节:

我正在IIS6上运行ASP.NET4.0.30319.0。我已经主持了一个包含ReportViewer的网站很长一段时间了(大约3年)。四月份,我升级到了4.0运行时,事情平稳地运行了几个月

现在,我突然发现托管ReportViewer的页面上出现了相当多的会话超时异常。事件查看器记录了许多这样的事件,当它真正能够查看页面时,它是命中或未命中的。点击页面一次,就可以看到生成的报告。刷新,则会发生错误。再次刷新,它将返回

我浏览了很多论坛,试图找出问题所在——大多数论坛似乎建议更改SQL server设置(我没有使用)、更改AsyncRendering=“False”、更改应用程序池设置或超时。我不愿意改变其中任何一个,因为它在一个星期前才起作用,没有这个问题

如果没有Windows更新,或者有人在我不知情的情况下更改了服务器,我就没有主意了

更新


我尝试增加应用程序池中的最大虚拟内存,但没有成功。

升级到.NET 4.0和Report Viewer 2010后,我遇到了几乎相同的问题。我同时做了两次升级,现在我不知道该怪谁。在我的例子中,刷新确实有效,但是用户在夜间保持页面打开,然后在第二天早上会话已经丢失时单击刷新。我们的应用程序池每晚都会回收

我相信报表查看器应该让会话保持活动状态,但事实并非如此。没有来自报表查看器的任何请求。然后,当会话结束时,无论是会话过期还是应用程序回收,它都会丢失其存储状态。我也在使用InProc,我试图更改它,但是报表查看器无法与状态服务器一起工作。我将稍后再试,离开InProc

请看我的类似文章

我还没有将它投入生产,但是我给了带有报告的aspx页面一个自定义页面来派生,我将在那里检查会话是否确实超时。它基本上是重新加载报告页面,而不是在预期会话的位置进行回发

if (Context.Session != null)
        {
            //Tested and the IsNewSession is more advanced then simply checking if 
            // a cookie is present, it does take into account a session timeout, because 
            // I tested a timeout and it did show as a new session
            if (Session.IsNewSession)
            {
                // If it says it is a new session, but an existing cookie exists, then it must 
                // have timed out (can't use the cookie collection because even on first 
                // request it already contains the cookie (request and response
                // seem to share the collection)
                string cookieHeader = Request.Headers["Cookie"];
                if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
                {
                    Response.Redirect(Request.Url.ToString());
                }
            }
        }

在升级到.NET 4.0和Report Viewer 2010之后,我遇到了几乎相同的问题。我同时做了两次升级,现在我不知道该怪谁。在我的例子中,刷新确实有效,但是用户在夜间保持页面打开,然后在第二天早上会话已经丢失时单击刷新。我们的应用程序池每晚都会回收

我相信报表查看器应该让会话保持活动状态,但事实并非如此。没有来自报表查看器的任何请求。然后,当会话结束时,无论是会话过期还是应用程序回收,它都会丢失其存储状态。我也在使用InProc,我试图更改它,但是报表查看器无法与状态服务器一起工作。我将稍后再试,离开InProc

请看我的类似文章

我还没有将它投入生产,但是我给了带有报告的aspx页面一个自定义页面来派生,我将在那里检查会话是否确实超时。它基本上是重新加载报告页面,而不是在预期会话的位置进行回发

if (Context.Session != null)
        {
            //Tested and the IsNewSession is more advanced then simply checking if 
            // a cookie is present, it does take into account a session timeout, because 
            // I tested a timeout and it did show as a new session
            if (Session.IsNewSession)
            {
                // If it says it is a new session, but an existing cookie exists, then it must 
                // have timed out (can't use the cookie collection because even on first 
                // request it already contains the cookie (request and response
                // seem to share the collection)
                string cookieHeader = Request.Headers["Cookie"];
                if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
                {
                    Response.Redirect(Request.Url.ToString());
                }
            }
        }

您使用的是inProc、state server还是sql支持的会话?单个web服务器还是服务器场?它只在生产中发生吗?棘手的会议?您使用缓存吗?使用inProc,应用程序位于单个web服务器上。会话中存储的所有内容都是用户的身份验证状态,否则不会有大量数据。您使用的是inProc、state server还是sql支持的会话?单个web服务器还是服务器场?它只在生产中发生吗?棘手的会议?您使用缓存吗?使用inProc,应用程序位于单个web服务器上。会话中存储的只是用户的身份验证状态——否则就不会有大的数据集。