2016-10-11 4 views
1

단일 메서드 내에서 게시 된 이벤트의 결과를 얻는 방법이 있는지 궁금합니다. 나는 WCF 서비스가 여기에 그 방법 중 하나의 구현 : 내 WCF 방법은 오류가 발생하거나하지 않을 경우 발신자를 알리는 결과를 반환 볼 수 있듯이EventAggregator 확인

public Result DisplayMessage(string message) 
{ 
    // some error handling 
    if(errorOccurred) 
    { 
     return new Result { IsError = true, ErrorMessage = "error occurred"} 
    } 

    eventAggregator.GetEvent<DisplayMessageEvent>().Publish(new DisplayMessageEventArg(message)); 

    return new Result { IsError = false, ErrorMessage = String.Empty }; 
} 

은. 이벤트를 게시하기 전에 오류 처리를 수행 할 수 있지만 DisplayMessageEvent 구독자 측에서 문제가 발생하면 이에 대한 결과도 반환하고 싶습니다. 일반적으로 DisplayMessageConfirmationEvent과 같은 작업을 수행하고 구독자가이 이벤트를 게시자에게 보내지 만 단일 메서드 내에서이를 수행하는 방법은 무엇입니까? 즉, 기본적으로 내가하고 싶은 것은 이벤트를 게시하고 구독자로부터의 결과를 기다리고 WCF 호출자에게 반환하는 것입니다. 어떤 아이디어?

답변

2

EventAggregator은 화재 및 잊어 메징 전용입니다. 아마도 결과가있는 메시지를 지원하는 다른 종류의 메시징 시스템을 사용하려고 할 것입니다.

말했다되고, 당신은 당신의 방법을 계속하여 다른 이벤트를 기다릴 수 있습니다

는 알고 있어야 ... DisplayMessageAnswerEventPubSubEvent<Result> 인과

public Result DisplayMessage(string message) 
{ 
    // some error handling 
    if(errorOccurred) 
    { 
     return new Result { IsError = true, ErrorMessage = "error occurred"} 
    } 

    eventAggregator.GetEvent<DisplayMessageEvent>().Publish(new DisplayMessageEventArg(message)); 

    var result = new TaskCompletionSource<Result>(); 
    eventAggregator.GetEvent<DisplayMessageAnswerEvent>().Subscribe(x => result.SetResult(x)); 

    return result.Result; 
} 

이 원래 이벤트 의 가입자 답변을 항상 보내려면이 있어야합니다. 그렇지 않으면 영원히 머물러 있습니다.

+0

고마워요, 제가 원했던대로 정확하게 작동합니다. 답변으로 표시되었습니다. "다른 메시징 시스템"에 대해 언급 한 호기심에서 - 몇 가지 예를 들어 주시겠습니까? 나는 도서관에 대한 간단한 목록 만 열람 할 수 있도록 읽었습니다. – SteppingRazor

+1

거기에 많은 사람들이 있습니다. 이것은 정말로 필요한 것에 달려 있습니다. 하나의 프로세스, 하나의 컴퓨터에서 여러 프로세스, 여러 컴퓨터에서 여러 프로세스, 장애 조치 같은 클러스터 기능 ...이 조금 나이가 있지만 몇 가지가 포함되어 있습니다 : http://stackoverflow.com/questions/1545442/net-service-bus - 권고 – Haukinger