ASP.NET服务器端异步页面更新

ASP.NET Server side asynchronous page updates

本文关键字:更新 异步 NET 服务器端 ASP      更新时间:2023-09-26

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

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

感谢您抽出时间

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

至于如何做到这一点,我过去曾使用JQuery访问过ASP.Net web服务,并感到非常高兴。如果你走这条路,ASP.net将自动在JSON到.net对象之间转换,然后再转换回来,这非常方便。

这里有一篇文章向您展示了如何使用JQuery访问web服务,还有一篇关于如何在服务器上设置web服务的文章。

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

不幸的是,我对新的.NET任务并行库一无所知,但根据您所查询的内容,您可能会选择对不同的数据块发出多个AJAX请求。这将自动使服务器端的事情并行,同时当每个请求独立返回时,您还可以在客户端显示进度。如果这不起作用,通知用户长时间运行请求进展的另一种流行模式是每隔一段时间将数据与"延续令牌"一起传递回。只要客户端代码收到延续令牌,它就会知道有更多数据,并将该令牌与下一个请求一起传递回服务器。然后,服务器使用此令牌来恢复上次中断的位置。所以它可以是一个简单的东西,就像上次在哪个RowID上停止一样。

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