2008-09-30 5 views
6

인사말!비동기 웹 메서드 호출 후 UI 업데이트

일부 작업을 수행하고 부울 값을 반환하는 WebMethod가 포함 된 WebService가 있습니다. 시간이 걸릴 수도 있고 안될 수도 있으므로 비동기식으로 호출하고 싶습니다.

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

이 웹 서비스는 웹 팜의 각 서버에 있습니다.

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에서 웹 인터페이스에서 호출 : 그래서 각 서버의 DoWork() 메서드를 호출하기 위해, 나는 서버 URL 목록을 기반으로, 그렇게 할 수있는 클래스 라이브러리를 가지고 버튼을 과 같이 이벤트를 클릭

WebSvcsMgr.DoAllWork(server_list); 

을 웹 양식에 의해 호출 정적 DoAllWork() 메소드의 경우,이 IAsyncResult를 통해 비동기 호출 할 계획입니다. 그러나 결과가 반환 될 때 팜의 각 서버에 대한 DoWork() WebMethod의 성공/실패를보고하고자합니다. UpdatePanel과 연계하여 가장 좋은 방법은 무엇입니까? GridView? 레이블? 정적 도우미 클래스가 Web Form으로 어떻게 반환 할 수 있습니까?

답변

0

조건부 업데이트 패널의 리터럴이 좋을 것입니다. 비동기 웹 서비스 메서드를 호출 할 때

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

WebSvcsMgr.DoAllWork()에서 MyWebSvc.DoWork()를 비동기 적으로 호출하거나 Web Form에서 WebSvcsMgr.DoAllWork()를 비동기 적으로 호출하는 것이 더 맞습니까? – Bullines

+0

아마도 사용자가 웹 페이지와 상호 작용하지 않거나 사용자 피드백이 없으면 웹 양식이 필요합니다. – craigmoliver

+0

웹 양식이 아니라 해당 메서드를 의미합니다. – craigmoliver