“正在加载”异步调用的网页

时间:2010-05-13 21:57:29

标签: c# asp.net asynchronous long-polling

我在ASP.NET / C#中有一个简单的网页。目前,为了完全呈现数据,我需要调用在后台线程上运行的代码块,并且可能需要几分钟才能完成。我已经明确了(使用页面声明中的async属性)执行并在完成后使用html返回正常。我想要它做的是允许我立即返回某种“加载页面”,然后在后台工作完成后更新该页面。现在,在处理后台工作时,我在页面上什么也得不到。任何关于最佳方式或聪明方式的想法都将非常感激!

谢谢,

西格

3 个答案:

答案 0 :(得分:1)

我同意上面发布的评论。

然而,我会使用ashx(处理程序)将“处理器”实现为单独的页面,因为这些非常简单,可以从javascript中调用和轮询,并且您只需将处理请求事件编码到响应流中。

我很乐意在我的网站上向您展示一个示例,但我的主持人决定在他们的服务器上更新.net时让我的网站运行一周(您可以想象我对此并不特别满意)。< / p>

基本上虽然在我的情况下我有一个依赖于以下数据的页面: 英国广播公司 谷歌 亚马逊 YouTube的 其他一些随机网站。

页面返回给用户,然后页面上的各个控件将ajax调用回服务器以获取其部件。

将反馈数据加载到的标签的默认内容是一个简单的动画gif图像,看起来很像flash或silverlight加载圈。

数据恢复后,gif将替换为服务器馈送的内容。

这意味着客户端看到“正在加载”,服务器正在忙着处理客户需要的所有内容(从它的角度看似乎是同步的)。

这是一种干净的用户体验,代码非常简单。

在查看如何使用silverlight进行文件上传时,我想到了这个想法。

基本概念:

  1. ajax打电话给“ashx”。 (可能有10行javascript)
  2. 服务器处理请求。 (取决于请求的复杂性,使用查询字符串传递的变量)
  3. 响应在其他完整页面上填充1个元素。 (ajax cllback这样做)
  4. 希望这会有所帮助:)

答案 1 :(得分:0)

有许多方法可以使用Ajax来实现您所描述的内容,但如果您想要保持简单,只需Flush()在之前使用某个加载屏幕进行回复<div> Loading.. <% Response.Flush(); %> <% System.Threading.Thread.Sleep(5000); %> Done! </div> 开始长期运行的任务:

{{1}}

答案 2 :(得分:0)

您想要的是HTTP Server Push HTTP Streaming 长轮询。取决于它是如何完成的。

网上有很多例子,还有深入解释问题的文章。我首先要研究那些。

您还可以在HTTP Streaming上查看此SO问题...

Cross-browser implementation of "HTTP Streaming" (push) AJAX pattern

有一个很棒的介绍文章的链接。

或者这个以长轮询

为例

How do I implement basic "Long Polling"?

https://stackoverflow.com/questions/tagged/long-polling

希望这有帮助。