2017-09-18 7 views
0

내가 제목에서 말한 것과 마찬가지로 클라이언트 응용 프로그램을 끄면 어떻게 그 서비스 (클라이언트 응용 프로그램과 함께 시작)를 종료 할 수 있습니까? 나는 _serviceClient.CloseAsync()하지만 IIS Express에는 여전히 서비스를 호출하려고합니다. 그래서 우리는 그것을 할 어떤 방법이 있습니까?코드에서 IIS Express에서 WCF 서비스를 종료

업데이트 : 내 서비스는 카메라를 처리하고 이미지를 클라이언트 측으로 스트리밍합니다. 따라서 서비스를 종료하지 않으면 IIS에서 수동으로 해제 할 때까지 카메라가 대기합니다. 그래서 저는 두면을 서로 없애고 싶습니다.

나는 앱에서 클로즈 액션으로 릴리즈 카메라 기능을 처리했습니다. 하지만 예상치 못한 경우 앱이 추락하여 코드가 실행되지 않습니다.

+1

클라이언트와 서비스는 서로 다른 두 가지입니다. 클라이언트에서 서비스를 종료 할 수 없습니까? 클라이언트가 전혀 실행되지 않고 요청을 처리하지 않는 경우 어떻게 클라이언트에서 서비스를 시작합니까? 실제 요구 사항은 무엇입니까? 왜 당신의 서비스에이 기능을 갖고 싶습니까? –

+0

너무 오래 유휴 상태 인 경우 IIS에서 유휴 시간 제한을 설정하여 서비스를 "일시 중단"할 수 있습니다. 일부 클라이언트가 연결하려고하면 자동으로 다시 시작됩니다. 어떤 클라이언트도 서비스를 종료 할 수 없어야합니다. – Fildor

+1

업데이트 후 : 서비스 종료를 통해이 작업을 수행하는 것은 잘못된 방법입니다. a) 클라이언트가 스트리밍을 능동적으로 중지 할 수 있도록 API를 작성하십시오. b) 누군가가 실제로 스트림을 듣고 있지 않다면 서버에서이를 감지하고 중지합니다. 예를 들어 "dead-man"스위치를 사용할 수 있습니다. 나는. 클라이언트는 스트림을 유지하기 위해 하트 비트를 전송해야합니다. – Fildor

답변

1

대부분이 문제는 발신자가 수신 대기중인 수신자를 인식하지 못할 때 발생합니다. 예를 들어 UDP 스트리밍에서.

하나의 솔루션은 청취자가 아직 거기에 있음을 나타내며 특정 간격으로 수신 대기하도록 "하트 비트"메시지를 보내도록하는 것입니다. 하트 비트가 더 이상 수신되지 않으면 서버는 클라이언트가 어떤 이유로 든 자유로운 리소스 (스트림 중지, 카메라 해제 ...)에 대해 더 이상 듣지 않는다고 결론을 내릴 수 있습니다.

UDP가 신뢰할 수 없으므로 단일 하트 비트가 누락 될 수 있다는 점을 유의하십시오. 하트 비트 주파수와 "누락 된 비트"의 완벽한 구성이 당신과 네트워크에서 어떻게 작동 하는지를 확인해야합니다.

일반적인 패턴은 클라이언트가 수신 패키지를 나타 내기 위해 서버에 "확인"메시지를 보내야하는 프로토콜을 구현하는 것입니다 (스트림의 UDP 패키지도 다시 보낼 필요가 있기 때문에).

+0

WCF 서비스에서 HTTP 프로토콜을 사용하고 있습니다. 그럼 네가 언급 한 패턴에 대한 더 많은 정보를 나에게 줄 수 있니? –