ASP.NET中的后台任务

时间:2013-08-19 12:05:22

标签: asp.net backgroundworker session-state

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 加载没有服务数据的页面(= Display my UI as quickly as possible
  2. 使用ajax调用(= Have a non-UI background task to fetch the information in advance
  3. 获取服务数据
  4. 这实际上是相同的,虽然你可以显示一个动画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
  5. 为了发布示例代码,知道您是否使用jquery会很有帮助吗?普通的JavaScript?别的什么?没有javascript?

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

    1. 获取请求。
    2. 是缓存的服务数据?
      2.A. 是吗?包含完整数据的帖子页面 2.B. 否?没有服务数据的帖子页  2.b.i.在服务器端获取服务数据并将其缓存以供将来请求使用  2.b.ii.在客户端获取服务数据并将其缓存以用于当前会话。
    3. 编辑2:
      请记住,这个学科的缺点是,如果您获取数据的方法发生变化,您将不得不记住在服务器端和客户端都修改它。