Pozdrowienia!Aktualizowanie interfejsu użytkownika po wykonaniu asynchronicznych wywołań WebMethod
Mam WebService, który zawiera WebMethod, który wykonuje niektóre pracy i zwraca wartość boolean. Praca, którą wykonuje, może, ale nie musi zająć trochę czasu, więc chciałbym ją nazwać asynchronicznie.
[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;
}
}
Ta usługa sieci Web istnieje na każdym serwerze w farmie internetowej. Tak aby wywołać metodę DoWork() na każdym serwerze, mam bibliotekę klasy, aby to zrobić, na podstawie listy adresów URL serwera:
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();
}
}
}
Wreszcie, nazywa się to z poziomu interfejsu WWW w asp: przycisk kliknij zdarzenie tak:
WebSvcsMgr.DoAllWork(server_list);
dla metody DoAllWork statyczne(), zwanego przez Web Form, mam zamiar zrobić to poprzez wywołanie asynchroniczne IAsyncResult. Jednak chciałbym zgłosić sukces/niepowodzenie metody DoWork() WebMethod dla każdego serwera w farmie, gdy wyniki zostaną zwrócone. Jakie byłoby najlepsze podejście do tego w połączeniu z UpdatePanel? GridView? Etykiety? W jaki sposób może to zostać zwrócone przez statyczną klasę pomocniczą do formularza internetowego?
Czy byłoby rozsądniej wywoływać Asynchronicznie MyWebSvc.DoWork() z WebSvcsMgr.DoAllWork(), czy raczej wywoływać asynchronicznie WebSvcsMgr.DoAllWork() z formularza internetowego? – Bullines
Prawdopodobnie formularz internetowy, jeśli użytkownik nie jest z nim w kontakcie lub nie, jest niezbędny. – craigmoliver
Mam na myśli metodę, a nie formularz internetowy – craigmoliver