실버라이트 1.1
어디선가 아래와 같이 비동기 호출을 하면, 가수 '비'의 동기가 나오지는 않죠? (^^;;; 죄송합니다.)
어디선가 아래와 같이 비동기 호출을 하면, 가수 '비'의 동기가 나오지는 않죠? (^^;;; 죄송합니다.)
// mySvc : 웹 레퍼런스로 등록한 이름
mySvc.MyWebService1 svc = new mySvc.MyWebService1();
AsyncCallback cb = new AsyncCallback(MyMethodCallback);
svc .BeginMyMethod(myParam1, myParam2, ... , cb, svc);
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);
}
{
// 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, ...);
// 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());
}
{
// 수행 결과 에러 또는 취소 판단이 가능
if (e.Error != null || e.Cancelled == true)
return;
// 수행 결과 (e.Result)
ShowResult(e.Result.ToArray());
}
Trackback 0 And
Comment 0






