我有一個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存在於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的Web界面稱爲:按鈕單擊像這樣的事件:
WebSvcsMgr.DoAllWork(server_list);
對於Web窗體稱爲靜態DoAllWork()方法,我打算讓這個通過IAsyncResult的異步調用。但是,我希望報告DoWork()WebMethod成功/失敗,以便返回結果。與UpdatePanel結合的最佳方法是什麼?一個GridView?標籤?而且這怎麼可能由靜態助手類返回到Web窗體?
從WebSvcsMgr.DoAllWork()異步調用MyWebSvc.DoWork(),還是從Web窗體異步調用WebSvcsMgr.DoAllWork()會更有意義? – Bullines 2008-09-30 17:12:50