2012-10-02 2 views
0

클라이언트가 몇 초마다 WCF 서비스를 호출하는 클라이언트/서버 앱을 개발 중입니다. 저는 IIS를 사용하지 않고 있습니다.이 서비스는 콘솔 앱으로 실행됩니다 (프로덕션 시스템에 Windows 서비스로 설치하려는 의도로). WCF netTcpBinding을 사용하여 통신/서비스 장애를 복구하는 방법은 무엇입니까?

나는 클라이언트가 단순히 던져 가져옵니다 EndpointNotFoundException를 처리하여 서비스에 연결할 수 없다는 사실을 무시은 BasicHttpBinding을 사용하여 시작했다, 내가 서비스를 중지하는 경우 (A COMMS/서버 장애를 시뮬레이션). 서비스를 다시 시작한 후 클라이언트는 다시 호출 할 수 있으며 모든 것이 좋습니다.

이제는 netTcpBinding을 사용하도록 전환했습니다. 서비스를 중지하면 콘솔 창이 닫힐 때까지 약간 걸립니다 (아마도 TCP가 연결을 관리하는 방식으로 인해 결국 시간이 초과되기 때문일 수 있습니다). 이 시점에서 클라이언트는 CommunicationException을 가져옵니다 ("소켓 연결이 중단되었습니다"). 서비스를 다시 시작하면 클라이언트는 basicHttpBinding에서와 같이 "다시 시작"할 수 없습니다. 서비스를 호출하려고 시도 할 때마다 CommunicationObjectFaultedException ("통신 개체, System.ServiceModel.Channels.ServiceChannel은 오류 상태이므로 통신에 사용할 수 없습니다.")가 발생합니다.

어떻게 내가은 BasicHttpBinding으로 본 것과 유사한 이력서/복구 행동의 어떤 종류에서 건물 가겠어요?

답변

1

오류가 발생한 채널을 다시 사용할 수 없습니다. 클라이언트를 ICommunicationObject에 캐스팅하고 Abort()를 호출하여 정리해야합니다.

그 후 당신은 단순히 새로운 클라이언트 채널을 만들어 새롭게 시작합니다. 서버가 일정 기간 동안 작동하지 않는 경우 타이머를 사용하여이 작업을 수행 할 수 있습니다.

+0

매력적인 작품 덕분입니다! –

관련 문제