웹서비스 호출


실버라이트 1.1

어디선가 아래와 같이 비동기 호출을 하면, 가수 '비'의 동기가 나오지는 않죠? (^^;;; 죄송합니다.)

// mySvc : 웹 레퍼런스로 등록한 이름
mySvc.MyWebService1 svc = new mySvc.MyWebService1();
AsyncCallback cb = new AsyncCallback(MyMethodCallback);
svc .BeginMyMethod(myParam1, myParam2, ... , cb, svc);

메서드가 수행된 후 아래와 같이 비동기 호출 콜백 함수(MyMethodCallback)가 수행되면서
EndMyMethod로부터 수행 결과를 받아써야 했습니다.

public void MyMethodCallback(IAsyncResult ar)
{
    // mySvc : 웹 레퍼런스로 등록한 이름
    mySvc.MyWebService1 pf = (mySvc.MyWebService1)ar.AsyncState;

    // 수행 결과

    string[] array = pf.EndMyMethod(ar);
    ShowResult(array);
}

실버라이트 2

실버라이트 2에서는 이벤트 방식으로 변경이 되어, 일관성 있어지고, 사용이 쉬워졌습니다.

일단 Web Reference 가 Service Reference로 개념이 바뀌었습니다.
만든 Web Service를 Add Service Reference 하셔서 쓰시면 됩니다.

자신이 등록한 WebService Class 이름을 namespace로 하는 *SoapClient 인스턴스를 만들어 사용합니다.

// MyWSProject : 웹서비스 프로젝트 네임스페이스
// MyWSClass : 웹서비스 클래스

mySvc.MyWSClassSoapClient svc = new mySvc.MyWSClassSoapClient ();
svc.MyMethodCompleted += new EventHandler<MyWSProject.MyWSClass.MyMethodCompletedEventArgs>(_svc_MyMethodCompleted);
svc.MyMethodAsync(myParam1, myParam2, ...);

그럼 아래 이벤트 핸들러에서 결과를 받아서 씁니다.

void svc_MyMethodCompleted(object sender, MyWSProject.MyWSClass.MyMethodCompletedEventArgs e)
{
    // 수행 결과 에러 또는 취소 판단이 가능 
    if (e.Error != null || e.Cancelled == true)
        return;

    // 수행 결과 (e.Result)
    ShowResult(e.Result.ToArray());
}


 

'Silverlight > Migration from 1.1' 카테고리의 다른 글

웹서비스 호출  (0) 2008.03.25
Navigate 메서드  (0) 2008.03.25
Downloader 대신 WebClient  (1) 2008.03.08
HtmlTimer 대신 뭘 쓰면 될까요?  (2) 2008.03.06
Image.Source는 어떻게 쓰나  (0) 2008.03.06
BrowserHost야 어딜 간거니???  (4) 2008.03.06

설정

트랙백

댓글