ASP.NET服务器端异步页面更新
ASP.NET Server side asynchronous page updates
我有一个asp.net页面,它需要做一些异步工作,例如访问URL和下载一些内容,这可能需要几分钟的时间。在此期间,当每个任务完成时,都需要更新页面上的内容以指示进度等。对此,首选方法是什么?调用一些客户端javascript并将数据传递给它?
我正在尝试将.NET任务并行库的东西用于异步操作。
感谢您抽出时间
由于互联网的工作方式,您需要让客户端脚本轮询服务器。服务器总是在侦听来自客户端的请求,但客户端并不总是在侦听服务器的响应,因此除非客户端启动请求,否则它不会等待响应。
至于如何做到这一点,我过去曾使用JQuery访问过ASP.Net web服务,并感到非常高兴。如果你走这条路,ASP.net将自动在JSON到.net对象之间转换,然后再转换回来,这非常方便。
这里有一篇文章向您展示了如何使用JQuery访问web服务,还有一篇关于如何在服务器上设置web服务的文章。
此外,您通常不希望一个需要几分钟才能完成的web服务,因为如果页面经常被点击,这可能会导致服务器上的线程用完。您可能想了解如何设置计划任务来预先计算此数据,或向数据源添加索引,以便更快地查找数据。无论哪种方式,只要你使用AJAX,你的用户的网络交互都不会被锁定(即,他们仍然可以点击链接并与你的网站交互。如果他们在加载页面时离开页面,浏览器将关闭连接,用户将启动一个新的请求,并一直等待以获得响应。)
不幸的是,我对新的.NET任务并行库一无所知,但根据您所查询的内容,您可能会选择对不同的数据块发出多个AJAX请求。这将自动使服务器端的事情并行,同时当每个请求独立返回时,您还可以在客户端显示进度。如果这不起作用,通知用户长时间运行请求进展的另一种流行模式是每隔一段时间将数据与"延续令牌"一起传递回。只要客户端代码收到延续令牌,它就会知道有更多数据,并将该令牌与下一个请求一起传递回服务器。然后,服务器使用此令牌来恢复上次中断的位置。所以它可以是一个简单的东西,就像上次在哪个RowID上停止一样。
您可能想要查看SignalR库,该库允许通过HTTP、长轮询甚至新浏览器的Web套接字与服务器进行实时通信/事件。
- 当视图在AngularJS中返回时,我如何获得异步服务调用来更新视图
- Angular js - 异步调用 $scope.users 后不更新模态值
- 网页异步更新的方式有哪些
- 如何使用javascript异步更新我的内容
- Angular 中数组的异步更新
- 处理角控制器中异步更新的正确方法
- RxJS异步请求更新
- 异步mongodb更新循环中最后一次迭代后的重定向
- 分析异步调用未更新AngularJS中的$scope变量
- 异步更新标签时出现问题
- AngularJS - 模型在异步调用后未更新
- Angular 应用程序在异步调用 Firebase 后未更新(脏检查)
- 使用 ko.mapping.fromJS 更新异步 ajax 调用后可观察的淘汰表
- Nodejs 异步 mongodb 保存或更新
- 如何使 JQuery 屏蔽输入插件在 Ajax 更新面板中的异步回发后 asp.net 工作
- 异步添加/更新保存方法未更新
- Angularfire-$scope在异步调用后不会更新,$apply抛出错误
- MVC中模型的异步更新
- 有没有更好的方法可以在不使用setInterval的情况下创建异步更新
- Angularjs不会更新异步模型更改的视图