65.9K
CodeProject 正在变化。 阅读更多。
Home

带有 Web 服务执行进度条的 Web 窗体

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (4投票s)

2008年8月6日

CPOL

1分钟阅读

viewsIcon

44733

downloadIcon

1015

向开发人员展示如何管理长时间运行的 Web 服务的状态,然后在支持 Ajax 的 Web 窗体中使用此状态。

引言

本文的目的是展示如何获取当前 Web 服务进度的通知。 这将通过使用启用 AJAX 的网页、对 Web 服务的异步调用以及一些简单的 CSS 技巧来显示进度条来实现。 本文还展示了如何管理 Web 服务的状态。

  1. 查看 Web 服务代码。 为了管理 Web 服务的状态,我们使用一个名为 ProgressValues Cache 对象的类。 值存储在具有唯一 ID 的 Cache 中。

    public class ProgressValues
    {
        public bool AbortPressed = false;
        public int step = 0;
        public int value = 0;
    }       
    
    ProgressValues pw = new ProgressValues();
    Context.Cache[UID] = pw;
  2. 网页有一个 AJAX 定时器,默认情况下禁用,并在用户按下“开始”按钮时开始计时,并且还有一个 AJAX UpdatePanel 来显示进度条、控件和 GridView ,而无需完全页面回发。

  3. 当用户单击“开始处理”按钮时,我们对 Web 服务进行异步执行,并通过以下代码行将 IAsyncResult 的值传递给 Session 对象

    MyService.Test ts = new MyService.Test();
    
    // AsyncResult for async execution of service
    IAsyncResult my_ar;         
    
    // Start async execution of web service
    my_ar = ts.BeginGo(UID, steps, values, null, null); 
    
    // Remember AsyncResult in Session for later use
    Session["my_ar"] = my_ar;
  4. 当计时事件发生时,我们从 Session 获取 IAsyncResult ,并使用以下代码行更新控件

    // Get IAsyncResult from Session
    IAsyncResult my_ar = (IAsyncResult)Session["my_ar"]; 
    
    // Get ProgressValues from web service
    pw = ts.GetProcessValues(Session["WebServiceUID"].ToString()); 
    
    // Async execution of service done
    if (my_ar.IsCompleted)  

Using the Code

首先,您需要在 Web 服务器上安装 Microsoft AJAX。 其次,您需要编译/部署/启动 TestService 项目到您的 Web 服务器,然后添加 Web 引用到“Test 项目”,命名为 MyService。 如果您这样做,则您的服务的 Proxy 类将存在,并且您可以在 Test 项目中使用这个 proxy 类。

历史

  • 2008 年 8 月 6 日:初始发布
© . All rights reserved.