1.我正在使用报告服务,有时当我尝试加载报告时出现此错误ASP.NET session has expired or could not be found
。
2.-我意识到,即使用户相同,Session.SessionID属性也会发生此错误。如果它没有改变,则加载报告。我的意思是,如果我多次刷新报告,只要Session.SessionID与最后一个相同,就会加载报告。
3.-微软文档说:
使用基于cookie的会话状态时,ASP.NET不会分配 存储会话数据,直到使用Session对象。作为一个 结果,为每个页面请求生成一个新的会话ID,直到 访问会话对象。如果您的应用程序需要静态 整个会话的会话ID,您可以实现 应用程序的Global.asax文件和存储中的Session_Start方法 Session对象中的数据用于修复会话ID,或者您可以使用代码 在应用程序的另一部分中显式存储数据 会话对象。
如果您的应用程序使用无cookie会话状态,那么 会话ID在第一个页面视图上生成并维护 整个会议。
关键是我不能使用无Cookie会话状态,因为我需要cookie。
我该怎么做才能避免这个错误?或者我该怎么做才能避免每次请求都改变Session.SessionID?
答案 0 :(得分:5)
您可能正在存储会话InProcess。尝试将其更改为会话状态服务器。您可以找到更多详细信息here。
答案 1 :(得分:3)
我正在使用报告查看器11.0.0;在system.web部分的web配置中,进行下一个配置:
<sessionState timeout ="120" mode="InProc" cookieless="false" />
当您在reportviewer对象中生成报告(C#代码如下)时,将KeepSessionAlive属性更改为false,并将AsynkRendering属性更改为false,这就是
this.rvReporte.KeepSessionAlive = false;
this.rvReporte.AsyncRendering = false;
(rvReporte)是一个位于我的asp.net表单上的ReportViewer控件 这个解决方案对我有用,我希望能为其他人工作。
问候
答案 2 :(得分:2)
<httpCookies httpOnlyCookies="false" requireSSL="false"/>
解决了这个问题。 谢谢 : http://www.c-sharpcorner.com/Blogs/8786/reportviewer-Asp-Net-session-has-expired.aspx
答案 3 :(得分:2)
我通过在reportviewer服务器控件上将AsyncRendering设置为false来解决此问题
答案 4 :(得分:1)
Alexsandar给出的答案只是这个问题的解决方案之一。
此链接清楚地说明了此问题的根本原因和可能的解决方案: http://blogs.msdn.com/b/brianhartman/archive/2009/02/15/did-your-session-really-expire.aspx
对于Brian,他描述问题的方式,如果他只有一个IIS服务器,在他的代码中使用会话对象就可以解决问题,因为在这种情况下,在请求中传递的SessionID从浏览器到服务器将被映射到服务器上的相应sessionID,因此会话到期消息将不会到来。
设置模式仅适用于服务器群集,其中Brian有多个IIS服务器处理相同的请求。在这种情况下,进程外模式将有助于从会话存储中检索会话对象,而不管服务器命中。
基于这种观察,我得出结论,Brian的问题与cookie无关,而是与服务器集群有关。 Brian在他的问题和随后的解决方案中提供的信息误导了我,因此澄清了这一点。希望它可以帮助任何寻找类似问题的人。
谢谢, VIPUL
答案 5 :(得分:1)
从外部Intranet访问网站时,我在报表查看器页面上遇到了同样的问题。 hardvin的建议为我节省了一天的时间 this.rvReporte.KeepSessionAlive = false; this.rvReporte.AsyncRendering = false;
我更改了控件本身的属性。我在用户控件上使用报表查看器,它引发了一个自定义事件,用于在主机页面以编程方式提供参数,而不是提示用户。
答案 6 :(得分:0)
尝试从您调用的ASPX页面顶部删除 SessionState =“somevalue”标记。我正在使用自定义SessionState并拒绝使用InProc,因为我在Azure上有多个实例。如果您愿意,甚至可以使用AsyncRendering = True。如果这对您有用,请告诉我。
答案 7 :(得分:0)
答案 8 :(得分:0)
增加值“ MaxActiveReqForOneUser”
“ C:\ Program Files \ Microsoft SQL Server \ MSRS13.MSSQLSERVER \ Reporting Services \ ReportServer \ rsreportserver.config”
**<Add Key="MaxActiveReqForOneUser" Value="200"/>**
答案 9 :(得分:0)
在 iframe 中显示报表查看器给我们带来了这个错误。如果显示在 iframe 之外,效果很好。 reportviewer 对象有这样的配置,AsyncRendering = false 和 KeepSessionAlive = true。
具有报表查看器并在浏览器中设置会话 cookie 的 web 应用程序是使用 .net 框架 4.6.1 编译的。我们升级到 4.8 并将其放入 web.config
<sessionState cookieSameSite="None" />
<httpCookies requireSSL="true"/>