2011-12-29 4 views
0

나는 Rx를 사용하는 방법을 고민하고있다. 대부분의 예제는 오래되었거나 Begin/End를 참조하거나 길고 복잡합니다.Rx를 사용하여 단순히 asyc WCF 서비스 메서드를 호출하는 방법

나는 간단한 WCF 서비스 메서드를 사용하여 int를 취해 JobMaster 개체를 반환합니다.

public static void GetJob(int jobId) 
    { 
     KernServiceClient.GetJobCompleted += GetJobCompleted; 
     KernServiceClient.GetJobAsync(jobId); 
    } 

    private static void GetJobCompleted(object sender, GetJobCompletedEventArgs e) 
    { 
     // JobMaster available in e.Result 
    } 

가 어떻게이 수신을 사용하도록 변경합니까 : 여기

내가 순간에 호출하는 방법입니다? 바울의 도움에

편집

덕분에 내가 거기 대부분의 방법을 가지고있다. 이것은 지금처럼 생겼습니다. 구독 문제는 발생하지 않습니다. 어떤 아이디어?

public static JobMaster GetJob(int jobId) 
    { 
     JobMaster retval = null; 

     IKernService kernServiceInterface = KernServiceClient; 

     var getJobFunc = Observable.FromAsyncPattern<int, Server.KernMobileWcfService.JobMaster>(
      kernServiceInterface.BeginGetJob, kernServiceInterface.EndGetJob); 

     var result = getJobFunc(jobId); 

     result 
      .Subscribe 
      (
       onNext: x => retval = ConvertJobMaster(x), 
       onError: ex => ShowError(ex.Message) 
      ); 

     return retval; 
    } 

답변

1

http://blog.paulbetts.org/index.php/2010/09/26/calling-web-services-in-silverlight-using-reactivexaml/ // ReactiveXaml 부분을

요약을 무시 : 인터페이스에 KernServiceClient 캐스트는 FromAsyncPattern를 사용하여 시작/종료 방법을 다시 얻기 위해 구현합니다.

+0

올바른 방향으로 나를 지적 해 주셨습니다. 그곳의 대부분. 구독 실패 (업데이트 참조). 어떤 아이디어? –

+0

그건 효과가 있었을 것입니다. 첫 번째 예외를 사용하도록 설정 하시겠습니까? –

0

비동기 적으로 계산하고 OnNext 처리기에서 할당하더라도 "retval"을 반환합니다. 서비스에서 값을 수신하면 논리가 OnNext 핸들러로 이동되거나 호출자에게 IObservable을 리턴해야합니다.

+0

무슨 뜻인지 확실하지 않습니다. 가능한 경우 내 코드를 가져 와서 문제가 무엇인지 보여줄 수 있습니다. –

0

반환 할 때 retval로 무엇을하고 있습니까? 다음에 완료 할 때 더 많은 처리가 필요한 경우 구독의 onCompleted 이벤트에서 처리합니다.

관련 문제