【问题标题】:Updating UI After Asynchronous WebMethod Calls在异步 WebMethod 调用之后更新 UI
【发布时间】:2010-09-14 07:06:07
【问题描述】:

您好!

我有一个 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;        
    }
}

此 WebService 存在于网络场中的每台服务器上。因此,要在每台服务器上调用 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 点击​​事件中调用的,如下所示:

WebSvcsMgr.DoAllWork(server_list);

对于 Web 窗体调用的静态 DoAllWork() 方法,我计划通过 IAsyncResult 进行异步调用。但是,我想在返回结果时为场中的每台服务器报告 DoWork() WebMethod 的成功/失败。与 UpdatePanel 结合使用的最佳方法是什么?一个网格视图?标签?静态助手类如何将其返回给 Web 表单?

【问题讨论】:

    标签: asp.net web-services asp.net-ajax asynchronous


    【解决方案1】:

    Asynchronous pages 在需要异步调用 Web 服务方法的场景中很有帮助。

    【讨论】:

      【解决方案2】:

      条件更新面板中的文字会很好。

      <asp:UpdatePanel ID="up" runat="server" UpdateMode="Conditional">
         <ContentTemplate>
           <asp:Literal ID="litUpdateMe" runat="server" />
         </ContentTemplate>
      </asp:UpdatePanel>
      

      【讨论】:

      • 从 WebSvcsMgr.DoAllWork() 异步调用 MyWebSvc.DoWork() 或者从 Web 窗体异步调用 WebSvcsMgr.DoAllWork() 是否更有意义?
      • 如果用户没有与之交互或不需要用户反馈,则可能是 Web 表单。
      • 我指的是方法,而不是网络表单
      猜你喜欢
      • 1970-01-01
      • 2014-08-13
      • 2019-07-07
      • 1970-01-01
      • 2020-09-05
      • 2016-06-15
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      相关资源
      最近更新 更多