6

ご挨拶!

いくつかの作業を行い、ブール値を返す WebMethod を含む WebService があります。それが行う作業には時間がかかる場合とそうでない場合があるため、非同期で呼び出したいと思います。

[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 は、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();
        }
    }
}

最後に、これは asp:Button クリック イベントで次のように Web インターフェイスから呼び出されます。

WebSvcsMgr.DoAllWork(server_list);

Web フォームから呼び出される静的な DoAllWork() メソッドについては、IAsyncResult を介した非同期呼び出しにする予定です。ただし、結果が返されるときに、ファーム内の各サーバーの DoWork() WebMethod の成功/失敗を報告したいと思います。UpdatePanel と組み合わせて、これに対する最善のアプローチは何でしょうか? GridView? ラベル?また、これを静的ヘルパー クラスから Web フォームに返すにはどうすればよいでしょうか。

4

2 に答える 2

1

非同期ページは、Web サービス メソッドを非同期的に呼び出す必要があるシナリオで役立ちます。

于 2008-10-02T17:59:20.677 に答える
0

条件付き更新パネルのリテラルは問題ありません。

<asp:UpdatePanel ID="up" runat="server" UpdateMode="Conditional">
   <ContentTemplate>
     <asp:Literal ID="litUpdateMe" runat="server" />
   </ContentTemplate>
</asp:UpdatePanel>
于 2008-09-30T16:28:36.840 に答える