2008-09-30 7 views
6

Salutations!Mise à jour de l'interface utilisateur après les appels WebMethod asynchrones

J'ai un WebService qui contient un WebMethod qui fonctionne et renvoie une valeur booléenne. Le travail que cela fait peut prendre du temps ou non, alors j'aimerais l'appeler de façon asynchrone.

[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;   
    } 
} 

Ce WebService existe sur chaque serveur d'une batterie de serveurs Web. Donc, pour appeler la méthode DoWork() sur chaque serveur, j'ai une bibliothèque de classe pour le faire, sur la base d'une liste d'URL du serveur:

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

Enfin, on appelle cela de l'interface Web dans un aspic: Bouton cliquez sur l'événement comme ceci:

WebSvcsMgr.DoAllWork(server_list); 

pour la méthode DoAllWork statique() appelée par le formulaire Web, je prévois d'en faire un appel asynchrone via IAsyncResult. Cependant, je voudrais signaler un succès/échec du WebMethod DoWork() pour chaque serveur de la batterie que les résultats sont retournés. Quelle serait la meilleure approche à cela en conjonction avec un UpdatePanel? Un GridView? Étiquettes? Et comment cela pourrait-il être renvoyé par la classe d'assistance statique au formulaire Web?

Répondre

0

Un littéral dans un panneau de mise à jour conditionnel conviendrait.

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

Est-il plus logique d'appeler de façon asynchrone MyWebSvc.DoWork() à partir de WebSvcsMgr.DoAllWork(), ou plutôt d'appeler WebSvcsMgr.DoAllWork() de manière asynchrone à partir du formulaire Web? – Bullines

+0

Probablement le formulaire Web si l'utilisateur n'interagit pas avec lui ou pas de commentaires de l'utilisateur est nécessaire. – craigmoliver

+0

Je veux dire la méthode, pas le formulaire web – craigmoliver

1

Asynchronous pages sont utiles dans les scénarios où vous avez besoin d'appeler de manière asynchrone des méthodes de service Web.

Questions connexes