4

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

谢谢,

西格

4

3 回答 3

1

我同意上面发表的评论。

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

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

本质上,尽管就我而言,我有一个页面依赖于以下数据: bbc google amazon youtube 一些其他随机站点。

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

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

数据返回后,gif 将替换为服务器提供的内容。

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

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

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

基本概念:

  1. ajax 调用“ashx”。(也许 10 行 javascript)
  2. 服务器处理请求。(取决于请求的复杂性,使用查询字符串传递的变量)
  3. 响应在其他完整页面上填充 1 个元素。(ajax cllback 这样做)

希望这可以帮助 :)

于 2010-05-17T14:10:18.190 回答
0

您想要的称为HTTP Server PushHTTP StreamingLong Polling。取决于它是如何完成的。

网上有很多例子,也有深入解释这些问题的文章。我会从研究这些开始。

您还可以在 HTTP Streaming 上查看这个 SO question...

“HTTP Streaming”(推送)AJAX 模式的跨浏览器实现

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

或者这个有一个长轮询的例子

如何实现基本的“长轮询”?

或者

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

希望这可以帮助。

于 2010-05-13T22:12:03.050 回答
0

有很多方法可以使用Ajax实现您所描述的内容,但是如果您想保持它非常简单,您可以在开始长时间运行的任务之前Flush()简单地使用一些加载屏幕来响应:

<div>
    Loading..
    <% Response.Flush(); %>
    <% System.Threading.Thread.Sleep(5000); %>
    Done!
</div>
于 2010-05-13T22:07:54.497 回答