Silverlight 4의 Observables를 사용하여 WCF 호출을하는 데 질문이 있습니다. 아래의 간단한 webservice 호출을 고려하십시오.silverlight, Observables on WCF calls를 사용하여 IEvent 캐스팅 T : AsyncCompletedEventArgs
var adminclient = ServiceProxy.WithFactory<AuthenticationClient>();
var results= Observable.FromEvent<AuthorizeAdministratorCompletedEventArgs>(
s => adminclient.AuthorizeAdministratorCompleted += s,
s => adminclient.AuthorizeAdministratorCompleted -= s).ObserveOnDispatcher();
adminclient.AuthorizeAdministratorAsync();
results.Subscribe(e =>
{
//Enable UI Button
});
나는 그것을 반환에 일부 오류 검증을 수행의 가입 방법을 감싸는 확장 방법을 구현했습니다. 반환 results.Subscribe에
(예 =>
e is System.Collections.Generic.Event<AuthorizeAdministratorCompletedEventArgs>
거의 모든 쿼리는 다른 리턴 타입과 같은 것이다 : 나는 래퍼가 있다면
e is System.Collections.Generic.Event<AsyncCompletedEventArgs>
을 어떻게 든 이런 식으로 보였습니다. 모든 유형의 캐스팅은 어떻게 할 수 있습니까 xxxCompletedEventArgs베이스 유형 AsyncCompletedEventArgs 내가 e.EventArgs에 액세스하고 오류를 위의 코드는 유형의 객체 'System.Collections.Generic.Event
1 MyProject.Provider.AuthorizeAdministratorCompletedEventArgs을 캐스팅 할 수
가 없습니다 실패합니다
public static IDisposable Subscribe<TSource>(this IObservable<TSource> source, Action<TSource> onNext = null, Action onError = null, Action onFinal = null)
{
Action<TSource> onNextWrapper = (s) =>
{
var args = (System.Collections.Generic.IEvent<AsyncCompletedEventArgs>)s;
try
{
if (WCFExceptionHandler.HandleError(args.EventArgs))
{
if (onNext != null)
onNext(s);
}
else
{
if (onError != null)
onError();
}
}
finally
{
if (onFinal != null)
onFinal();
}
};
return source.Subscribe<TSource>(onNextWrapper, (e) => { throw e; });
}
속성을 검사 할 수 있도록 ] 'to type'System.Collections.Generic.IEvent 1[System.ComponentModel.AsyncCompletedEventArgs]'
이 메서드 정의는 입니다. WCFExceptionHandler 는 수신 확장 메서드의 대부분만큼 같은 비 차단 연산자 (같은 이벤트를 처리하는 역할을하도록 .HandleError (args.EventArgs는))
public static bool HandleError(AsyncCompletedEventArgs e)
매우 자세히 답변 해 주셔서 감사합니다.하지만 "observer.OnNext (evt);" 컴파일되지 않습니다. 가장 오버로드 된 메서드가 'System.IObserver>와 일치합니다. OnNext (System.Collections.Generic.IEvent ) 일부 잘못된 인수 –
Neil
@Neil - 죄송합니다, Observable.CreateWithDisposable>가 Observable 일 필요가 있습니다 .CreateWithDisposable >. 내 예를 업데이트했습니다. 그거 좋았어? –
그래, 또한 알아 냈어, 고마워, 마지막 문제는 내 마지막 진술에 "observer.OnCompleted();"가 포함되어 있지만 "adminclient.AuthorizeAdministratorAsync();" 두 번, 두 개의 다른 매개 변수를 사용하면 OnNext 만 실행되고 두 번째 매개 변수는 이벤트 처리기가 표시되지 않습니다.모든 제안 } – Neil