【问题标题】:ASP.NET Server side asynchronous page updatesASP.NET 服务器端异步页面更新
【发布时间】:2012-01-09 22:27:28
【问题描述】:

我有一个 asp.net 页面需要做一些异步工作,例如访问 URL 和下载一些可能需要几分钟的内容。在此期间,随着每项任务的完成,它需要更新页面上的某些内容以指示进度等。为此首选的方法是什么?调用一些客户端javascript并将数据传递给它?

我正在尝试将 .NET 任务并行库的东西用于异步操作。

感谢您的宝贵时间

【问题讨论】:

  • 或者客户端脚本是否需要轮询页面或 WCF 服务或其他东西来获取更新?

标签: javascript asp.net task-parallel-library


【解决方案1】:

由于互联网的工作方式,您需要让客户端脚本轮询服务器。服务器始终在监听来自客户端的请求,但客户端并不总是在监听来自服务器的响应,因此除非客户端发起请求,否则它不会等待响应。

至于怎么做,我以前用JQuery打过一个ASP.Net web service,很高兴。如果你走这条路,ASP.net 会自动在 JSON 和 .Net 对象之间转换,然后再转换回来,这非常方便。

Here is a post 向您展示如何使用 JQuery 访问 Web 服务,another one 向您展示如何在服务器上设置 Web 服务。

此外,您通常不希望 Web 服务需要几分钟才能完成,因为如果页面经常被点击,这可能会导致服务器上的线程用完。您可能希望了解如何设置计划任务以预先计算此数据或将索引添加到数据源,以便您可以更快地查找它。无论哪种方式,只要您使用 AJAX,您的用户的 Web 交互就不会被锁定(即他们仍然能够单击链接并与您的站点交互。如果他们在加载页面时离开页面浏览器将关闭连接,用户将开始一个新的请求并再次等待整个时间以获得响应。)

不幸的是,我对新的 .NET 任务并行库一无所知,但根据您查询的内容,您可以选择的一种选择是针对不同的数据块发出多个 AJAX 请求。这将自动使服务器端的事情并行化,同时为您提供在客户端显示进度的额外好处,因为这些请求中的每一个都是独立返回的。如果这不起作用,另一种流行的模式来通知您的用户长时间运行的请求的进度是每隔一段时间将数据与“延续令牌”一起传回。只要客户端代码收到一个延续令牌,它就知道还有更多数据,并将该令牌与下一个请求一起传递回服务器。然后,服务器使用此令牌从上次中断的地方继续。因此,它可能与上次停止的 RowID 一样简单。

【讨论】:

    【解决方案2】:

    您可能想查看SignalR 库,该库允许通过 HTTP、长轮询甚至新浏览器的 Web 套接字与服务器进行实时通信/事件。

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 2013-10-23
      • 1970-01-01
      • 2020-01-04
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多