Session 和 ReportDocument 对象模型的持久性

什么是 Session?

Session 是 ASP 和 ASP.NET 中用于保持状态的基于 Web 服务器的方法。Session 允许通过将对象存储在 Web 服务器的内存中在整个用户会话过程中保持任何对象的持久性。

Session 通常用于执行以下操作:

  • 存储需要在整个用户会话过程中保持其状态的信息,例如登录信息或用户浏览 Web 应用程序时需要的其它信息。
  • 存储只需要在页重新加载过程中或按功能分组的一组页之间保持其状态的对象。

Session 的优点是它在 Web 服务器上保持用户的状态信息,可供在任何时间从任何页访问这些信息。因为浏览器并不需要存储任何这些信息,所以可以使用任何浏览器,甚至可以使用 PDA 或手机这样的浏览器设备。

此持久性方法的限制

  • 随着越来越多用户登录,Session 所需要的服务器内存量也会不断增加。
  • 访问 Web 应用程序的每个用户都生成一个单独的 Session 对象。每个 Session 对象的持续时间是用户访问的时间加上不活动的时间。
  • 如果每个 Session 中保持许多对象,并且许多用户同时使用 Web 应用程序(创建许多 Session),则用于 Session 持久性的服务器内存量可能会很大,从而影响了可伸缩性。

有关替代的持久性方法,请参见以下内容:

使用 Session 保持 ReportDocument 对象模型

如果已将报表封装到 ReportDocument 对象模型中,则必须使用基于服务器的方法(例如 Session 或 Cache)保持 ReportDocument 对象模型。

若要使用 Session 保持 ReportDocument 对象模型中的报表,请实例化 ReportDocument,然后将其赋给 Session。

Note注意

有关完整的示例,请参见教程“教程:使用 Session 保持 ReportDocument 对象模型”

当您学习使用 Crystal Reports 生成 ASP.NET Web 应用程序时,Session 是最简单的方法,也是首选方法。它还是在报表可共享性较低的情况下存储 ReportDocument 实例时推荐使用的方法。有关可共享性的解释,请参见“缓存具有“高可共享性”的报表”

使用 Session 保持 ReportDocument 对象模型的限制

当 ReportDocument 实例的可共享性程度较高时,请考虑使用 Cache,而不是 Session。

比较 Session 和 ViewState

Session 主要用于保持代码隐藏类中对象的状态。ViewState 主要用于保持 Web 页上控件的状态。当 Web 页上的控件被绑定到代码隐藏类中的对象,并且两者都需要在页重新加载过程中保持状态时,Session 和 ViewState 将共同实现持久性。

在这种情况下,ViewState 保持 CrystalReportViewer 控件,而 Session 保持绑定到该控件的 ReportDocument 对象。

教程

若想全面了解如何保持报表的持久性,您可以学习以下教程。