【问题标题】:What's the best way to handle session in Blazor (that ISN'T dependent on client)?在 Blazor 中处理会话的最佳方法是什么(不依赖于客户端)?
【发布时间】:2021-10-25 21:42:11
【问题描述】:

我们将 Blazor(服务器端)和 .NET 5 用于新的解决方案,该解决方案需要使用会话来消除完全相同数据的数据库往返。

我们目前正在使用推荐的 ProtectedBrowserStorage 模型,但是当我们尝试存储相对较大的数据集时,我们遇到了浏览器的 25MB 限制。因此,当我们处理最终用户需要查看和操作的数千条记录时,这可能并不理想。我们正在努力为最终用户优化性能。这是一个连接的桌面场景。

有没有更好的方法来处理 Blazor 中不受客户端浏览器限制的大型会话变量?

提前致谢。

【问题讨论】:

    标签: asp.net .net session blazor blazor-server-side


    【解决方案1】:

    这取决于你有多少并发用户,以及你的系统资源。

    单例服务跨会话持续存在,您可以使用任何您想要的数据结构。

    【讨论】:

      【解决方案2】:

      您可以使用所有主流浏览器都支持的 IndexedDb。

      我在 PWA 中使用此对象存储数据库,但您可以将其与 Blazor 服务器端应用程序或 Blazor WASM 客户端应用程序一起使用。

      IndexedDB 的限制对您和大多数情况都不是问题。
      浏览器管理数据,您只需决定如何刷新它们的策略。

      从这个库 https://github.com/amuste/DnetIndexedDb 开始并尝试一些示例。

      【讨论】:

        【解决方案3】:

        消除对完全相同数据的数据库往返。

        您可以使用缓存。这允许在会话/用户之间共享数据(可能存在风险,请小心)。它还会减少 I/O。

        缓存是服务器端的,您的应用也在服务器端运行。所以通常会更快。但尚不清楚您的内存限制(每个用户)是什么。

        【讨论】:

          【解决方案4】:

          根据您的需要,您可以通过几种不同的方式执行此操作:

          级联参数:一个很好的视频基础知识 - https://www.youtube.com/watch?v=ZmDMKp1Q8kA

          AppState 方法:一个很好的视频,涵盖两种不同的方式:https://www.youtube.com/watch?v=BB4lK2kfKf0

          这两者的主要问题是它们仍然按会话进行,并且会在刷新或新标签页时消失。

          我知道的唯一其他解决方案是使用 redis,只要您想保留数据,它就会保留数据,但它不会在 blazor 中。 好视频:https://www.youtube.com/watch?v=UrQWii_kfIE

          【讨论】:

          • 好的。我们使用 IIS、Blazor 和 MSSQL 作为后端(企业设置)运行。我以前只是将服务器 SessionState 与 WebForms 和 MVC 一起使用,但这显然不适用于 Blazor。我们还在调整数据库,以便跨 7000 万条记录的查询不会滞后...
          • 您也可以查看我自己的问题的两个答案,我不久前问过的问题与您的问题类似:link
          猜你喜欢
          • 2010-09-21
          • 1970-01-01
          • 2012-09-02
          • 2011-03-19
          • 1970-01-01
          • 2021-02-21
          • 1970-01-01
          • 1970-01-01
          • 2019-12-02
          相关资源
          最近更新 更多