使用Response.Flush方法实时显示处理过程的状态信息

来源:互联网 发布:mkv音轨提取软件 编辑:程序博客网 时间:2024/06/14 07:20

博客园原文

 

Web 项目,在处理大数据量和复杂业务的情况下,用户在浏览器中点击一个按钮后,服务器需要处理几十秒甚至好几分钟,才能将处理结果反馈给用户,在这个漫长的等待过程中,用户面对毫无反应的浏览器会不知所措,即便提示用户正在处理,用户由于不知道服务器的处理状态,在长时间等待后,也会不耐烦或误以为操作失败,而去刷新或者关闭浏览器。

 

怎么应对这种状态,给用户一个更好的体验呢?最好是把处理过程中的状态信息即时反馈给用户,就像杀毒软件扫描文件的时候,把扫描结果即时显示出来。

 

HttpResponse   位于命名空间:    System.Web

HttpResponse   类的方法和属性通过   HttpApplication HttpContext Page UserControl 类的 Response 属性公开。

HttpResponse   类的方法 Write 将信息写入 HTTP 应输 出流。

HttpResponse   类的方法 Flush 用来向客户端强制发送当前所有缓冲的输出数据,在请求处理期间,允许多次调用该方法。改方法仅仅在回发的情况(不包括异步回发情况)下才被支持。

 

我们可以利用 Response.Flush 方法来实现上述设想。

 

下面用一个示例来演示如何实时提示处理过程的状态。出于演示的目的,将不考虑具体的业务。

 

在网站项目里,新建一个 Web 窗体 Default.aspx

 

窗体上放置一个 Button 控件,给 Button 控件添加 Click 处理事件。我们将单击这个 Button 来触发传说中的大数据量的超复杂的业务运算。

 

再往窗体上添加一个 < iframe> 元素:

< iframe src ="Output.aspx" id ="OutputFrame" allowtransparency ="true" frameborder ="1"

    width ="400px" height ="200px" scrolling ="auto" marginheight ="0"></ iframe >

 

注意 < iframe> src 属性的值是“ Output.aspx ”。再追加一个新的 Web 窗体,名为“ Output.aspx ”,通过请求它在 < iframe> 来显示处理结果。

 

删除 Output.aspx 页面上的所有自动生成的 html 代码。在 Page_Load 事件里添加处理过程,处理那个传说中的大数据量的超复杂的业务运算。并且在这个处理过程中,实时地用 Response.Write 方法输出当前处理的状态信息,并且用 Response.Flush 强制回发给客户端,使用户得到及时的反馈。

 

代码很简单,很容易理解, 注意两点:

 

1 :在 Default.aspx Button 的“ Click ”事件处理过程中,定义一个 Session ,存 一个 标识 和其他画面 入的数据,用于 传递 Output.aspx 面,在 Output.aspx 面上判断,只有 Session 存在,并且标识正确的情况下,才使用 Session 保存的其他信息,来做那个传说中的大数据量的超复杂的业务运算;

 

2 在每次输出信息的时候,同时输出一行脚本,控制着 < iframe > 的的垂直滚动条滚动到最底下,让用户不用拖动滚动条就可以看到最新的输出信息。

 

全部的代码如下:

 

Default.aspx

 

 

 

Output.aspx

 

 

 

 演示结果截图

演示结果截图

 

原创粉丝点击