2008-09-30 19 views
6

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?

Odpowiedz

0

Dosłowne w warunkowym panelu aktualizacji byłoby w porządku.

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

Czy byłoby rozsądniej wywoływać Asynchronicznie MyWebSvc.DoWork() z WebSvcsMgr.DoAllWork(), czy raczej wywoływać asynchronicznie WebSvcsMgr.DoAllWork() z formularza internetowego? – Bullines

+0

Prawdopodobnie formularz internetowy, jeśli użytkownik nie jest z nim w kontakcie lub nie, jest niezbędny. – craigmoliver

+0

Mam na myśli metodę, a nie formularz internetowy – craigmoliver

1

Asynchronous pages są pomocne w sytuacjach, gdy trzeba asynchronicznie wywołać metody usługi sieci Web.

Powiązane problemy