2009-08-26 6 views
0

내 응용 프로그램에서 호출하는 웹 서비스에는 두 가지 방법이 있습니다.void를 반환하는 webservice의 비동기 메서드를 어떻게 호출 할 수 있습니까?

  1. XmlNode getCase(string parameter) // synchronous
  2. void getCaseAsync(string parameter) //async

단순히 방법 1 호출하고 이런하는 XMLNode에 결과를 저장할 수

XmlNode node=webservice.getCase("test"); 

하지만 난을 얻을 방법을 알아낼 수 없습니다 void를 돌려주는 async 메소드로부터의 결과 나는 이것을 시도했지만 erorr을 얻을 :

IAsyncResult result = webservice.getCaseAsync(("test"); 

어떤 아이디어?

예 브라이언 당신은 이미이 같은 내 양식 consturcor 클래스에서 구현 한 것이 바로 "완료"이벤트는,이 있습니다

webService.getCaseCompleted + = 새 webService.getCaseCompletedEventHandler (webService_getCaseCompleted);

공극 webService_getCaseCompleted (객체 송신자 webService.getCaseCompletedEventArgs E) { webService.GetCaseAsync ("테스트"); } 나는 거기에서 코드를 실행하고 싶습니다 내 양식에 단추가 있습니다. 나는 이것을 시도했다 개인 무효 button1_Click (개체 발신자, EventArgs 전자) { webService_getCaseCompleted (this, null); } 하지만 "e"가 Null입니다.이 방법을 어떻게 실행해야합니까?

감사합니다, 데이브

답변

0

방법의 반환 값의 형태가 void의 경우 그것은 아무것도 반환하지 않는 것을 의미한다. 그것이 아무것도 반환하지 않으면 그 결과를 기대할 수 없기 때문에 귀하의 과제가 유효하지 않습니다. 당신이 뭔가를 다음 void 다른 것으로 메소드 반환 유형을 수정 돌아가려면

webservice.getCaseAsync("test"); 

: 당신은 같은 이러한 방법을 호출해야합니다.

5

당신은 WCF 프록시에 대해 얘기하는 가정이 같이 갈 것 :

내가 IService 이런 식으로 뭔가 보일 것 : 클라이언트에서

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    void DoSomething(); 
} 

를, 당신의 코드는 다음과 같습니다

var serviceProxy = new MyService.Service1Client(); 
serviceProxy.DoSomethingCompleted += DoSomethingComplete; 
serviceProxy.DoSomethingAsync(); 

그리고 비동기 콜백은 다음과 같이 보일 것이다 :

private void DoSomethingComplete(object sender, AsyncCompletedEventArgs e) 
{ 
    // Handle the result 
} 

완료된 핸들러에서 서비스 호출이 성공했는지 여부를 확인할 수 있습니다 (e.Cancelled == false 및 e.Error == null).

기억하십시오. 비동기 호출은 결과를 즉시 제공하지 않습니다. 그것이 완료되면 알려줄 것입니다.

희망이 도움이 되셨습니까?

+0

웹 서비스를 호출하여 비동기 메소드가 완료되었는지 확인하고, 그렇지 않은 경우 결과를 얻는 방법이 있어야합니다. API가 아닐지 몰라도, 그렇지 않을 수도 있습니다. – Will

관련 문제