2011-04-05 2 views
2

비동기 WCF 서비스 구현이 있는데 WCF 메서드 호출 중에 클라이언트가 연결을 중단하면이를 감지하려고합니다.WCF 서비스에서 비동기 메서드 호출 중 연결 실패 감지

  1. 클라이언트는
  2. 서버가 비동기
  3. 클라이언트가 연결을 중단 요청 처리를 시작 WCF 메소드를 호출 (또는 연결이 어떤 이유로 실패)
  4. :

    기본적으로,이 내가 원하는 것입니다 클라이언트가 연결을 중단했다는 알림을 서버에 보내야합니다.

이것이 가능합니까?

이것은 긴 폴링 구현을위한 것입니다. 또는 서버가 클라이언트가 응답을 성공적으로 수신했는지 확인할 수 있습니까? 그렇지 않은 경우 다음 폴링 요청을 위해 응답을 저장해야합니다.

+0

TCP를 사용하고 있다고 가정합니다. TCP는 실제로 "상대방"이 여전히 살아 있는지 아닌지를 알려주는 방법을 가지고 있지 않습니다. 주기적으로 "keep alive"메시지를 보냅니다. TCP 위에 구축 된 일부 프로토콜은 원시 TCP가 아니라 IMHO입니다. –

+0

그러나 TCP는 클라이언트가 보낸 응답을 감지 할 수 있기 때문에 서버가 클라이언트가 응답을 수신하는지 여부를 알 수 있다고 생각합니다. –

답변

2

클라이언트가 연결되어 있는지를 알 수있는 확실한 방법을 모르겠습니다. this, thisthis

일부 대안은 이중 채널을 사용하거나 대기열을 사용하는 것입니다. 대기열 기반 솔루션은 대기열에 대한 서버 게시 응답과 대기열에서 응답을 선택하는 클라이언트를 갖습니다. 대기열은 MSMQ, DB, Azure로 구현 될 수 있습니다.

감사

+0

내 경험상,이 유형의 메시지 교환 패턴에 대한 솔루션을 구현하는 가장 안정적이고 쉬운 방법은 @Chandermani가 제안한대로 MSMQ 기반 옵션입니다. –

+0

리눅스 클라이언트가 있기 때문에 MSMQ는 옵션이 아닙니다. 나는이 시스템의 한계를 염두에두고 시스템을 재 설계 할 것이라고 생각한다. – lzm

0

대신 클라이언트의 응답을 기다립니다에 연결 머물고 폴링 솔루션을 설정할 수 있습니다, 그것은 연결이 끊어 즉시 요청을하고. 그런 다음 요청이 완료되었거나 아직 완료되지 않은 경우 X 초마다 다시 연결하여 폴링합니다.

서버에서 X * 2 초 동안 클라이언트 폴링이 표시되지 않으면 클라이언트에 문제가 발생하여 요청을 중단해야합니다.

이 작업을 수행하면 불행히도 클라이언트를 마지막으로 보았을 때 활성화 된 요청을 추적하기 위해 서버에 추가 인프라가 필요하게됩니다.