2010-06-24 7 views
1

WCF를 사용하여 채팅을 해부하고 이해하려면 this brilliant piece of article을 따르고 있습니다. 논리는 사용자가 채팅에 참여할 때 이벤트 처리기가 특정 사용자에 대해 만들어지고 사전에 저장된다는 것입니다.다른 사용자를위한 별도의 처리기 만들기 - WCF 채팅

 lock (syncObj) 
     { 
      if (!checkIfPersonExists(person.Name) && person != null) 
      { 
       this.person = person; 
       chatters.Add(person, MyEventHandler); 
       userAdded = true; 
      } 
     } 

이렇게 여러 서비스 사용자가 여러 개의 핸들러를 저장합니다.

내 질문은 이것이다 -

어떻게 서비스가 메시지가 이벤트 핸들러의 도움으로 바로 전송되는 대상 사용자를 식별합니까? 사용자를 위해 저장된 이벤트 처리기의 고유성을 이해하지 못합니다. 어떻게합니까

handler.BeginInvoke(this, e, new AsyncCallback(EndAsync), 
        null); 

은 특정 사용자에 대해 이중 클라이언트 계약 인터페이스를 구현 한 클라이언트 측에서 함수를 호출합니까? 어느 쪽이 연결되어 있습니까? 세션?

참고 :이 기사를 읽지 않고도 이해가 어려울 수 있음을 알고 있습니다. 나는 일반적인 방법으로 그것을 묻는 데 최선을 다했습니다.

감사

NLV는

+0

흠. 예상대로. – NLV

답변

1

난 당신이 서비스가 술집/하위 서비스에서 클라이언트에 응답하는 방법, 요구하고있다 생각합니다. 그렇다면 클라이언트가 "Subscribes"할 때 제공되는 callbackchannel OperationContext.Current.GetCallbackChannel<IYourServiceContract>()을 사용한다는 것입니다. 이 callbackChannel을 살펴보면 클라이언트와 통신하는 데 필요한 모든 데이터가 유지된다는 것을 알 수 있습니다. 링크 된 샘플 애플리케이션에서 작성자가 person 객체에서 이것을 얻는 경우 chatters 배열에 저장하려고합니다.

callback = 
       OperationContext.Current.GetCallbackChannel<IChatCallback>(); 

여기 내가 펍/서브 모델을 조금 단순화 할 수있는 기사입니다. http://www.codeproject.com/KB/WCF/wcfesb.aspx. 채팅 프로그램이 아니지만 콜백 채널을 통해 통신이 이루어지는 방법에 대해 좀 더 설명 할 수 있습니다.

귀하가 묻는 것이 아니라면 ... 분명히하십시오.

+0

나는 그것을 이미 발견했다. 대답을 주셔서 감사합니다 :). – NLV

관련 문제