ASP.NET会话已过期或无法找到 - >因为Session.SessionID发生更改(Reporting Services)

use*_*198 9 asp.net session-state sessionid reporting-services

1.-我正在使用报告服务,有时ASP.NET session has expired or could not be found当我尝试加载报告时出现此错误.

2.-我意识到,即使用户是相同的,Session.SessionID属性也会更改时出现此错误.如果它没有改变,则加载报告.我的意思是,如果我多次刷新报告,只要Session.SessionID与最后一个相同,就会加载报告.

3.-Microsoft文档说:

使用基于cookie的会话状态时,在使用Session对象之前,ASP.NET不会为会话数据分配存储空间.结果,为每个页面请求生成新的会话ID,直到访问会话对象.如果您的应用程序需要整个会话的静态会话ID,您可以在应用程序的Global.asax文件中实现Session_Start方法,并将数据存储在Session对象中以修复会话ID,或者您可以在您的另一部分使用代码应用程序在Session对象中显式存储数据.

如果您的应用程序使用无cookie会话状态,则会在第一个页面视图上生成会话ID,并为整个会话维护该会话ID.

关键是我不能使用无cookie会话状态,因为我需要cookie.

我该怎么做才能避免这个错误?或者我该怎么做才能避免Session.SessionID在每个请求上更改?

小智 7

我正在使用报告查看器 11.0.0;在 system.web 部分的 web 配置中,放置下一个配置:

<sessionState timeout ="120" mode="InProc" cookieless="false" />
Run Code Online (Sandbox Code Playgroud)

当您在 reportviewer 对象中生成报告(C# 代码波纹管)时,将 KeepSessionAlive 属性更改为 false,将 AsynkRendering 属性更改为 false,仅此而已

        this.rvReporte.KeepSessionAlive = false;
        this.rvReporte.AsyncRendering = false;
Run Code Online (Sandbox Code Playgroud)

(rvReporte) 是位于我的 asp.net 表单上的 ReportViewer 控件此解决方案对我有用,我希望对其他人有用。

问候


Ale*_*tic 5

您可能正在存储会话InProcess.尝试将其更改为会话状态服务器.你可以在这里找到更多细节.