2012-04-04 5 views
2

첫째로 : 우리가 설명하려고하는 문제에 대한 해결 방법이 있지만 그냥 옳지 않다고 생각합니다.알림이있는 클라이언트/서버에 대한 WCF 모범 사례

우리에게는 하나의 응용 프로그램 서버와 약 30-100 개의 클라이언트가있는 응용 프로그램이 있습니다. 서버를 확장해도 문제가되지 않습니다. 가장 중요한 것은 서버에서 클라이언트까지의 알림이지만 클라이언트에서 서버로 호출 할 서비스 메소드도 있습니다.

이제 우리는 콜백 채널을 사용하여 서비스 계약을 만들고 서비스에 클라이언트를 등록한 다음 (즉, 서비스에 활성 콜백 채널 목록 포함) 해당 콜백 채널을 통해 알림을 보냅니다.

문제는 우리가 주변 탐색 할 필요가 있었다 :

가 연결
  1. 타임 아웃 - 서비스가 지금은 매 순간에 대한 클라이언트에 의해 핑 일부 연결 유지 방법을 포함
  2. 다시 연결 클라이언트를 서버 또는 네트워크 오류 후 - 제가 염려하는 요점은 무엇입니까. 현재 서비스와 호출 된 콜백 객체를 호출하여 수신 된 통지를 처리하기 위해 장기 실행 클라이언트 객체 (서비스 참조, DuplexClientBase에서 상속)가 있습니다. client.Faulted에 우리는 서버에 다시 도달 할 수있을 때까지 클라이언트와 콜백 객체를 새로 생성 된 클라이언트로 교체하려고합니다. 이 방법은 꽤 이상한 예외 처리를 포함 ...

질문 :는 각 클라이언트에 WCF 서비스를 시작하고 서버에서 각 클라이언트의 엔드 포인트를 등록하는 것이 더 있을까? 설명 된 두 가지 문제에 대한 더 나은 해결책이 있습니까?

편집 : 요점은 무엇입니까? - 설명 된 아키텍처가 매우 일반적이어야한다고 생각하며이를 수행하기위한 "기본"최상의 방법을 찾고 있습니다. 이런 종류의 설정을위한 샘플이 있습니까?

답변

3

가용성에 문제가있는 경우 (이 경우 서비스 -> 소비자 및 소비자 - 서비스) 가용성이있는 경우 MSMQ와 같은 좀 더 내결함성이있는 전송 (아마도 netMsmqBinding 사용)을 고려해야합니다.

복잡한 WCF 콜백 인프라를 간단하고 영구적 인 구독 저장소로 바꿀 수 있습니다.

"콜백"을 보내야 할 때 가입 저장소에서 소비자 목록을 검색하고 각각에 메시지를 보내십시오.

상태 기반 연결이 없으므로 연결 시간이 초과되지 않습니다.

네트워크 장애 후 소비자에서 서비스로의 재 연결도 해결됩니다. 사실상 소규모 네트워크 중단은 눈에 띄지 않습니다.

죄송합니다.이 질문은 귀하의 원래 질문에 직접적으로 답변하지 않으며, 귀하가 요구하는 범위에 해당하지 않을 수도 있습니다.