【问题标题】:'Loading' web page for async call异步调用的“加载”网页
【发布时间】:2010-05-13 21:57:29
【问题描述】:

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

谢谢,

西格

【问题讨论】:

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


    【解决方案1】:

    我同意上面发布的 cmets。

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

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

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

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

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

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

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

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

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

    基本概念:

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

    希望这会有所帮助:)

    【讨论】:

      【解决方案2】:

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

      <div>
          Loading..
          <% Response.Flush(); %>
          <% System.Threading.Thread.Sleep(5000); %>
          Done!
      </div>
      

      【讨论】:

      • 试过那个并且喜欢这个想法,因为它看起来不错而且简单。但是,虽然它最初似乎可以工作,但最终失败了,因为它无法保存会话。
      【解决方案3】:

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

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

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

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

      里面有一篇很棒的介绍文章的链接。

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

      How do I implement basic "Long Polling"?

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 2017-08-30
        相关资源
        最近更新 更多