【问题标题】:ASP.NET MVC - what's the equivalent of ViewStateASP.NET MVC - ViewState 的等价物
【发布时间】:2012-02-28 19:27:19
【问题描述】:

我有一个在网络农场上运行的现有网络表单网站(多个网络服务器,每个请求都是非粘性的)。

其中一项任务是从第三方网络服务中检索大量数据。这是一个昂贵的过程(就响应所需的时间而言)。最佳解决方案是最初抓取所有数据并将其粘贴在页面的 ViewState 中(作为 List。然后我们有一个网格,允许我们翻阅这个产品列表。对于下一页的每个请求,我们不必重新访问慢速 Web 服务,因为我们已经在 ViewState 中缓存了数据。

那么,我将如何使用 MVC 完成此任务?如果我使用的是经典 ASP,我会将列表序列化并将其保存在表单的隐藏字段中。

但是在使用 MVC 时首选的方法是什么?如前所述,我使用的是非粘性会话,因此不能依赖服务器上的缓存。

如果我要将它保存在隐藏字段中,那么首先压缩数据(zip)以减小页面大小是否明智?同样,这里的“最佳实践”是什么?

非常感谢您的任何/所有建议

格里夫

PS - 我知道那里有类似的帖子(例如 ASP.NET MVC and ViewState),但它们并没有提供我需要的详细信息。

【问题讨论】:

  • 即使在经典的 ASP.NET 中,您也不应该将所有这些垃圾粘贴到每次往返中 - 这是会话变量的好处。如果您不喜欢这样,请在服务器端使用任何其他数据缓存策略。

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

在我看来,缓存是处理这个问题的最佳方式;点击网络服务,缓存数据,并将其用于每个后续请求。

可以在多个 Web 服务器之间共享缓存。默认行为是将其保存在进程中,但这绝不是固定的,可以配置为将其存储在远程 InProc 缓存、数据库或任何其他半持久存储方法中。 Azure想到了 AppFabric 缓存。

其次,正如你提到的,将所有数据转储到隐藏字段中,但出于多种原因我不喜欢这个想法

  • 页面膨胀 - 每次页面更改时,您都会提交此数据
  • 丢失数据 - 您必须为每次导航提交表单,忘记这样做意味着丢失您的数据

命名 2。

【讨论】:

  • MS Server AppFabric 有一个缓存,我仅用于这个用例。
  • @linkerro - 这就是我的想法,但出于某种原因输入了“Azure”。是不是某处改名了?
  • @Jamiec - Azure 和 Server 产品是不同的。当前版本没有功能对等,但微软表示它们将在未来融合。 Azure AppFabric 仅在 Windows Azure 上运行,Server AppFabric 用于私有云/服务器场。
【解决方案2】:

您的策略应取决于从 3rd 方服务检索到的数据的波动性以及调用它的成本。

  • 易变且昂贵。我会将数据缓存在 Appfabric Velocity 或 Memcached 等分布式缓存中。
  • 不易挥发且价格昂贵。在每个服务器节点的内存中缓存它的副本。
  • 便宜。每次需要时都拨打电话。不要打扰缓存。

如果从服务返回的数据集很大,我不会在您每次翻阅网格数据时上下传递它。仅检索当前页面的数据并将其呈现在您的网格中。 Telerik 对此有一个很好的实现,或者您可以尝试自己动手。

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    相关资源
    最近更新 更多