2011-01-26 3 views
3

WCF 서비스를 사용하여 원격 컴퓨터에서 실행중인 Windows 서비스를 관리하고 있습니다. Windows 서비스 구성을 수정하고 실시간으로 서비스 상태를 모니터링하는 데 사용하는 관리 클라이언트가 있습니다. 실시간 모니터링을 위해 매 초마다 서비스를 폴링합니다.호출간에 항상 WCF 서비스 연결을 해제해야합니까?

현재 서비스를 모니터링하는 동안 클라이언트를 항상 연결 상태로 유지하지만 데이터베이스와 마찬가지로 각 통화마다 연결하고 연결을 끊는 것이 좋습니다.

서비스에 자주 전화를 걸 때 또는 연결 및 연결 해제시 프로세스에 너무 많은 오버 헤드가 추가되는 상황에서 권장할까요?

감사

답변

1
기본적으로

및 권장 가장 좋은 방법은 WCF, 예를 들어,에서 통화 당 활성화를 사용하고 WCF 서비스에 대한 각 요청은 서비스 클래스의 새 인스턴스를 가져오고, 해당 인스턴스는 요청을 처리하고 결과를 반환 한 다음 처리합니다.

이 경우 통신 채널을 끊고 다시 설정하는 경우 (예 : 지속적으로 프록시 클라이언트 삭제 및 다시 작성)에는 아무런 문제가 없습니다. WCF 서비스 측에는 "기억 속에 남을"것이고 자원이나 그와 비슷한 것을 차지하지 않습니다. 또한 대부분의 데이터베이스와 달리 일반적으로 "연결 별 (per-connection)"라이센스 또는 관련된 것도 없습니다.

이 시나리오에서 처리 할 수있는 것은 통신 채널이 "오류 상태"로 들어가는 상황입니다. 서비스 호출이 실패하여 예외가 발생하거나 네트워크 우연으로 인해 채널이 중단 될 때 이 경우이를 처리하고 다시 연결을 다시 설정하려면 클라이언트 측에서 복구 메커니즘을 가져야합니다.

세션 지향 WCF 서비스를 사용하는 경우 상황이 조금 다를 수 있습니다.하지만 이러한 사항은 반드시 예외가되어야하며 꼭 필요한 경우에만 사용해야합니다.

+0

나는 (바인딩 기반 및 HTTP) PerCall 인스 턴싱의 경우에 당신도 다시 estabilishing 연결을 처리 할 필요가 없다는 생각합니다. 채널 자체는 연결이 아니며이 구성의 경우 완전히 상태가 유지되지 않으므로 이전 호출의 예외는 후속 호출에 영향을 미치지 않습니다. 프록시는 여전히 사용할 수 있습니다. –

+0

@ladislav mrnka : 예, 그렇습니다.하지만 전화가 예를 들어 실패한 경우 네트워크 중단 또는 이와 유사한 상황이 발생하면 클라이언트 측 프록시가 "오류가 발생하여"다시 만들어야합니다. –

관련 문제