2009-10-02 8 views
0

WCF 호출에서 데이터를 반환하는 일부 WCF 코드를 구현했지만 작동하지만 동기 동작합니다.ASP.net에서 비동기 적으로 WCF 호출 사용하지만 비동기 적으로 작동하지 않습니다.

IAsyncResult BeginGetAsyncData(object src, EventArgs args, AsyncCallback cb, object state) 
    { 
     _client = new ServiceReference1.Service1Client(); 

     return _client.BeginGetPermissionsByStaffID("xxx", cb, state); 
    } 

    void EndGetAsyncData(IAsyncResult ar) 
    { 
     //ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); 
     ServiceReference1.tblUser_Permission[] permissions = _client.EndGetPermissionsByStaffID(ar); 

     System.Threading.Thread.Sleep(2000); 

     dgResults.DataSource = permissions; 
     dgResults.DataBind(); 
    } 


    protected void Button1_Click(object sender, EventArgs e) 
    { 
     PageAsyncTask task = new PageAsyncTask(BeginGetAsyncData, EndGetAsyncData, null, null); 

     Page.RegisterAsyncTask(task); 

     txtOut.Text = "Waiting..."; 
    } 

내가 보는 것은 2 초의 일시 중지입니다. 그런 다음 "대기 중"이라는 메시지가 나타납니다. 명시 적으로 새 스레드를 생성하지는 않지만 이해한다면 WCF 서비스를 비동기식으로 정의 할 때 필요하지 않습니다.

도움이 될 것입니다.

답변

1

PageAsyncTask는 페이지 수명주기 동안 다른 프로세스와 비동기 적으로 실행됩니다.

모든 비동기 작업이 완료 될 때까지 실제 페이지가 브라우저에 전달되지 않습니다. 사용자가 버튼의 텍스트 변경 사항을 보게 될 때까지입니다.

+0

Doh! 그건 의미가 있습니다. 나는 그것이 당신에게 잠시 걸릴 수있는 몇 가지가 있다면 여전히 장점이 있다고 생각합니다. 사용자가 지연을 덜 볼 수 있도록 서버에서 시간을 단축 할 수 있습니다. 감사합니다. –

관련 문제