我有一个 asp.net 页面需要做一些异步工作,例如访问 URL 和下载一些可能需要几分钟的内容。在此期间,随着每个任务的完成,它需要更新页面上的某些内容以指示进度等。对此的首选方法是什么?调用一些客户端 javascript 并将数据传递给它?
我正在尝试将 .NET 任务并行库的内容用于异步操作。
谢谢你的时间
最佳答案
由于互联网的工作方式,您需要让客户端脚本轮询服务器。服务器始终监听来自客户端的请求,但客户端并不总是监听来自服务器的响应,因此除非客户端发起请求,否则它不会等待响应。
至于怎么做,我以前用JQuery打过一个ASP.Net的web服务,很高兴。如果你走这条路,ASP.net 会自动在 JSON 和 .Net 对象之间转换,然后再转换回来,这非常方便。
Here is a post向您展示如何使用 JQuery 访问 Web 服务,以及 another one关于如何在服务器上设置网络服务。
另外,您通常不希望 Web 服务需要几分钟才能完成,因为如果页面被频繁访问,这可能会导致服务器线程耗尽。您可能希望了解有关设置计划任务以预先计算此数据或向数据源添加索引以便更快地查找数据的信息。无论哪种方式,只要您使用 AJAX,您的用户的网络交互就不会被锁定(即他们仍然可以点击链接并与您的网站互动。如果他们在页面加载时离开页面浏览器将关闭连接,用户将开始一个新的请求并重新等待整个时间以获取响应。)
不幸的是,我对新的 .NET Task Parallel Library 一无所知,但根据您查询的内容,您可能会采取一种选择,即对不同的数据 block 发出多个 AJAX 请求。这将自动使服务器端的事情并行,同时为您提供额外的好处,即在每个请求独立返回时在客户端显示进度。如果这不起作用,另一种通知用户长时间运行的请求的进度的流行模式是每隔一段时间传回数据以及“继续 token ”。只要客户端代码收到延续 token ,它就知道还有更多数据,并且会在下一个请求中将该 token 传回服务器。服务器然后使用此 token 从上次中断的地方继续。所以它可以像上次在哪个 RowID 上停止一样简单。
关于javascript - ASP.NET 服务器端异步页面更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796061/