2011-09-02 7 views
6

WSDualHttpBinding과 함께 작동하는 양방향 WCF 서비스가 있습니다. 내 문제는 고유 한 ID로 콜백 채널을 저장하는 방법을 찾는 것입니다. 이 서비스는 장기간 실행되도록 고안되었습니다. "Subscribe"메서드가 호출되어 목록이나 사전에 저장 될 때 OperationContext.Current.GetCallbackChannel() 반환 값을 간단히 잡을 수 있습니까? 연결이 생길 때까지 유효한지 보장됩니까?WCF 서비스에서 클라이언트 식별

답변

5

가장 쉬운 방법은 클라이언트가 서비스의 Subscribe 메소드에서 키 값을 제출하도록하는 것입니다. 콜백 채널을 사전에 저장할 수 있습니다. 이 사전은 아마도 대부분의 서비스 클래스가 PerCall 수명을 가지며 서비스 호출이 완료된 후에 처리되기 때문에 수명이 서비스 클래스의 수명보다 긴 정적 변수 또는 싱글 톤 클래스 일 필요가 있습니다. 스레딩 문제를 조심하십시오!

콜백 채널은 클라이언트 또는 서비스 측에서 언제든지 폴트 할 수 있습니다. 이 서비스는 오류가있는 채널의 가능성을 처리하고 오류가있는 채널을 사전에서 제거해야합니다. WSDuallHttpBinding은 "Stateless"바인딩이므로 서비스 측에서 호출을 시도 할 때까지 클라이언트의 모든 결함이 서비스 측에서 감지되지 않습니다. NetTcpBinding은 클라이언트가 오류 상태가되면 ChannelFaulted 이벤트를 발생시킵니다. 그 이유는 NetTcpBinding이 요구 사항에 맞을 경우 권장 할 것입니다.

public bool Subscribe(string id) { 
     ICallback callback = OperationContext.Current.GetCallbackChannel(); 
     if (!_activeCallbackChannels.Contains(id)) { 
      _activeCallbackChannels.Add(id, callback); 
      return true; 
     } 
     else { 
      return false; 
     } 

    } 
관련 문제