异步WebMethod调用后更新UI
时间:2020-03-06 14:55:47 来源:igfitidea点击:
你好!
我有一个WebService,其中包含执行一些工作并返回布尔值的WebMethod。它所做的工作可能会或者可能不会花费一些时间,因此我想异步地调用它。
[WebService(Namespace = "http://tempuri.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class MyWebSvc : System.Web.Services.WebService { [WebMethod] public bool DoWork() { bool succ = false; try { // do some work, which might take a while } catch (Exception ex) { // handle succ = false; } return succ; } }
此Web服务存在于Web场中的每个服务器上。因此,要在每台服务器上调用DoWork()方法,我有一个基于服务器URL列表的类库:
static public class WebSvcsMgr { static public void DoAllWork(ICollection<string> servers) { MyWebSvc myWebSvc = new MyWebSvc(); foreach (string svr_url in servers) { myWebSvc.Url = svr_url; myWebSvc.DoWork(); } } }
最后,这是通过Web接口中的asp:Button click事件调用的,如下所示:
WebSvcsMgr.DoAllWork(server_list);
对于Web窗体调用的静态DoAllWork()方法,我计划通过IAsyncResult使其异步调用。但是,我想报告服务器场中每个服务器的DoWork()WebMethod成功/失败,并返回结果。与UpdatePanel结合使用的最佳方法是什么? GridView?标签?静态助手类如何将其返回到Web窗体?
解决方案
有条件的更新面板中的文字可以很好。
<asp:UpdatePanel ID="up" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:Literal ID="litUpdateMe" runat="server" /> </ContentTemplate> </asp:UpdatePanel>
在需要异步调用Web服务方法的情况下,异步页面很有用。