2008-09-30 8 views
6

¡Saludos!Actualización de la IU después de las llamadas al Asynchronous WebMethod

Tengo un WebService que contiene un WebMethod que hace algún trabajo y devuelve un valor booleano. El trabajo que hace puede o no tomar algo de tiempo, así que me gustaría llamarlo de forma asíncrona.

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

Este servicio Web existe en cada servidor en una granja de servidores web. Así que para llamar al método DoWork() en cada servidor, tengo una biblioteca de clases para hacerlo, sobre la base de una lista de direcciones URL del servidor:

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

Finalmente, esto se llama desde la interfaz Web en un asp: Button haga clic en evento de este modo:

WebSvcsMgr.DoAllWork(server_list); 

para el método DoAllWork estática() llamado por el formulario web, planeo hacer esto una llamada asincrónica a través de IAsyncResult. Sin embargo, me gustaría informar un éxito/falla de DoWork() WebMethod para cada servidor en la granja de servidores a medida que se devuelven los resultados. ¿Cuál sería el mejor enfoque para esto en conjunción con un UpdatePanel? Un GridView? ¿Etiquetas? ¿Y cómo puede esto ser devuelto por la clase de ayuda estática al formulario web?

Respuesta

0

A Literal en un panel de actualización condicional estaría bien.

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

¿Tendría más sentido llamar a MyWebSvc.DoWork() de forma asincrónica desde WebSvcsMgr.DoAllWork(), o bien llamar a WebSvcsMgr.DoAllWork() de forma asincrónica desde el formulario web? – Bullines

+0

Probablemente el formulario web si el usuario no está interactuando con él o no es necesaria la retroalimentación del usuario. – craigmoliver

+0

Me refiero al método, no al formulario web – craigmoliver

1

Asynchronous pages son útiles en situaciones cuando se necesita para llamar de forma asíncrona métodos de servicios web.

Cuestiones relacionadas