2009-08-05 4 views
11

저는 클라이언트 측 서버 시스템을 가지고 있으며 서버 측 연결이 끊어 지거나/자동 종료 될 때 클라이언트를 '오프라인'상태로 만들고 싶습니다. 서버를 다시 사용할 수있게되면 '온라인'으로 돌아갑니다.WCF - 서비스 가용성에 대한 클라이언트 검사가 있습니다.

첫 번째 부분에서는 채널 오류 이벤트를 수신하고 클라이언트를 오프라인으로 설정하여 처리합니다. 그런 다음 서버에 '핑 (ping)'서비스를 호출하기 시작합니다 (매 30 초마다). 일단 그것이 살아 있으면 클라이언트는 bool을 얻고 온라인으로 다시 전환합니다.

이 모든 문제는 클라이언트가 ping 서비스를 호출하고 서버가 다운되었을 때 아무런 응답도 보내지지 않으며 결국 약 2 분 후에 종단점을 찾을 수 없다는 예외가 발생합니다. 이 시간까지 나는 이미 3-4 번 더 핑을 시도 했으므로 3-4 번의 양조 예외가 있습니다.

제 질문은 어떻게하면 정상적으로 핑 서비스를 처리 할 수 ​​있습니까? 이상적으로는 온라인 상태인지 여부를 알려주는 서비스를 주기적으로 호출하고, 그렇지 않은 경우 즉시 알려주고 싶습니다.

덕분에, 윌

답변

12

무엇 이것에 대해 : 당신은 서버 차단을 감지하는 경우

  • 하는 "핑"모드 "핑 (ping) 모드"에서
  • 를 입력, 당신은 "클라이언트의 설정 sendTimeout "을 매우 짧은 것, 예를 들어 "Ping"이 성공적으로 수행되면 서비스의 Ping 메소드에 대한 호출이 거의 즉각적으로 응답되어야하므로 약 2 초 정도 걸립니다. 클라이언트 프록시를 다시 작성하고 클라이언트의 "sendTimeout"을 다시 원래대로 설정하면
  • 에 응답해야합니다. 값 (기본값은 1 분 - 15 초, 30 초 - 무엇이든간에)

그런 식으로 "핑 모드"로 설정하면 응답 또는 시간 초과가 표시됩니다. 신속하게 서비스 가용성을 신속하게 감지 할 수 있습니다.

마크

+0

감사합니다. 마크, 훌륭한 아이디어는 내가 한 것입니다. 나는 이런 식으로 바인딩 타임 아웃을 편집 할 수 있다는 것을 완전히 잊었다. – WillH

+0

서버 연결이 끊어졌습니다. 어떻게 감지합니까? –

+0

@Ashutosh : 서버 연결이 끊어지면 몇 가지 오류 ("찾을 수 없음"또는 "시간 초과"또는 기타 오류 중 하나)로 통화가 실패합니다. –

관련 문제