【问题标题】:ASP.NET is there a way to save application state as session state on different server?ASP.NET 有没有办法将应用程序状态保存为不同服务器上的会话状态?
【发布时间】:2010-12-13 09:20:56
【问题描述】:

也许问题是错误的,但这是我想要实现的目标,也许还有其他方法可以做到这一点。

我有运行 .net 3.5 的 ASP.NET 应用程序,有一个客户端列表和少数其他基于列表的对象,这些对象在应用程序的所有用户之间共享。 IE。当客户端登录他的用户 ID 和一些其他属性时保存在应用程序状态的某个列表中。问题是这个应用程序很重,它的应用程序池需要每天重新启动一次左右,所以保存在这些 List 对象中的所有信息都丢失了。同时保存以Out-of-Proc模式保存在外部服务器上的客户个人数据。

有什么办法可以解决吗?共享会话?类似的东西。

请不要使用 MSSQL 解决方案...

干杯,专业人士!!!!

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    您应该只将应用程序状态用作保存在其他地方的数据的缓存。然后,您将使用 Application_Start 或一些延迟加载包装类将此类持久数据检索到应用程序对象中。

    如果您将易失性数据存储在应用程序对象的其他位置,那么您就有麻烦了。希望您已经抽象了对某个包装器对象后面的应用程序对象的访问,以便您的所有代码都在访问包装器而不是应用程序对象。现在您需要确保将修改保存在其他位置,以便在重新启动时恢复它们。

    坦率地说,应用程序状态对象确实有助于移植 ASP-Classic 站点。由于您实际上应该将应用程序状态视为缓存,因此它与 ASP.NET Cache 对象之间的功能存在重叠。

    【讨论】:

    • 所以你建议保存在缓存中,当应用程序池回收时会发生什么?
    • 我并不是说使用 Cache 可以解决您的池回收问题,我只是指出这里存在重叠。您需要将共享数据存储在某个非易失性位置,并在应用程序启动或按需时将其加载到应用程序或缓存中。如果您的代码修改了它需要的数据,则将其保留回非易失性存储。如果您想支持 Web Garden 或 Farms 使用缓存会更好,因为您可以在缓存项目上创建 SQL 或文件依赖项。
    【解决方案2】:

    您是否考虑过缓存数据列表?

    这篇SO 文章有一些很好的细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2010-12-21
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 2011-02-21
      相关资源
      最近更新 更多