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





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

引言
本文的目的是展示如何获取当前 Web 服务进度的通知。 这将通过使用启用 AJAX 的网页、对 Web 服务的异步调用以及一些简单的 CSS 技巧来显示进度条来实现。 本文还展示了如何管理 Web 服务的状态。
-
查看 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;
-
网页有一个 AJAX 定时器,默认情况下禁用,并在用户按下“开始”按钮时开始计时,并且还有一个 AJAX
UpdatePanel
来显示进度条、控件和GridView
,而无需完全页面回发。 -
当用户单击“开始处理”按钮时,我们对 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;
-
当计时事件发生时,我们从
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 日:初始发布