ご挨拶!
いくつかの作業を行い、ブール値を返す 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 フォームに返すにはどうすればよいでしょうか。