1

我正在使用 ASP.NET(不是 MVC)和 .NET v4(不是 v4.5)编写一个 Web 应用程序。

我从第 3 方 Web 服务中获取了一些我必须显示的数据,其中一种方法需要很长时间(几秒钟)才能完成。要获取/预取的信息取决于用户的初始请求(因为不同的用户要求有关不同对象的详细信息)。

在单用户桌面应用程序中,我可能会:

  • 尽快显示我的 UI
  • 有非UI后台任务提前获取信息
  • 因此希望有一个已经获取/缓存的数据版本,当用户深入到 UI 来请求它时

要使用 ASP.NET 做类似的事情,我想我可以:

  • 使用 BackgroundWorker,将 Session 实例作为参数传递给 worker
  • 完成工作人员的任务后,将获取的数据写入 Session
  • 如果用户的数据请求在任务完成之前到达,则阻塞直到它完成

您预见到问题,您能提出改进建议吗?

[StackOverflow 上还有其他关于 ASP.NET 和后台任务的问题,但这些似乎都是关于获取和更新全局应用程序数据,而不是特定于会话的数据。]

4

1 回答 1

1

为什么不使用与桌面应用程序相同的规则:

  1. 加载没有来自服务的数据的页面 ( = Display my UI as quickly as possible)
  2. 使用 ajax 调用 (= Have a non-UI background task to fetch the information in advance)获取服务数据
  3. 这实际上是一样的,虽然你可以显示一个动画 gif 来表明你仍在进行中......(Therefore hope have an already-fetched/cached version of the data, by the time the user drills down into the UI to request it

为了发布示例代码,了解您是否使用 jquery 会很有帮助?纯JavaScript?别的东西?没有javascript?

编辑
我不确定这是否是您的计划,但另一个想法是在服务器端也获取数据,并缓存数据以供将来请求。
在这种情况下,阶段将是:

  1. 得到一个请求。
  2. 是否缓存了服务数据?
    2.a. 是的?发布包含完整数据的页面。
    2.b。不?没有服务数据的发布页面。
    2.bi 在服务器端获取服务数据并将其缓存以供将来请求。
    2.b.ii。在客户端获取服务数据并将其缓存以供当前会话使用。

编辑 2:
请记住,本学科的不利之处在于,如果您获取数据的方法发生更改,您必须记住在服务器端和客户端都对其进行修改。

于 2013-08-19T12:12:22.727 回答