2011-08-10 1 views
0

세션이 활성화 된 이중 WCF 서비스를 사용하고 있으며 클라이언트에서 오류 상태 예외를 피하려고합니다.세션이 활성화 된 WCF 이중 서비스에서 오류가 발생한 상태를 처리하는 방법

이 주제에 대한 토론이 여러 번 있었지만 클라이언트 프록시 또는 채널을 다시 만들 것을 제안했습니다. Non는 세션이 활성화 된 이중 서비스에 중점을 둡니다.

이 문제는 서버에 클라이언트 당 하나의 세션이 있고 각 클라이언트에 서비스 프록시 (싱글 톤 서비스 프록시)의 인스턴스가 하나만 있다는 점입니다. 이중화이기 때문에 클라이언트 측에서 여러 객체가 해당 서비스 인스턴스의 이벤트 (서버에서 클라이언트로 전송 된 메시지)를 수신하고 있습니다. 서비스가 오류 상태 인 경우 더 이상 사용할 수 없습니다. 해당 인스턴스를 삭제하고 새 인스턴스를 만들면 모든 이벤트 처리기를이 새 인스턴스에 다시 연결하기가 어렵습니다.

서비스를 랩핑해야하고 객체가 이벤트에 연결될 때마다 핸들러를 목록에 저장하십시오 (서비스가 다시 생성 될 때 다시 연결할 수 있도록)? 메모리가 누출되기 쉬운 코드 분실로 보입니다.

모든 프록시 인스턴스를 삭제하지 않고 클라이언트 프록시/채널을 다시 시작하는 방법이 있습니까? (나는 VS 생성 된 프록시를 사용하고있다)

어떤 아이디어라도?

감사합니다, 당신은 프록시를 다시 시작할 수 없습니다

답변

2

MAB. 오류 상태의 유일한 복구는 현재 인스턴스를 중단하고 새 인스턴스를 재 작성하는 것입니다. 클라이언트 측에서 프록시 인스턴스에 종속 된 모든 것을 올바르게 등록 취소하고, 새 인스턴스를 생성하고 모든 것을 다시 등록해야합니다. 오류가 발생한 상태 (= 서비스를 호출하려고 시도 할 때)의 채널에 대한 예외를 얻으면이 전체 작업을 수행해야합니다. 휴양 후에 다시 전화해야합니다.

서비스 측면에서 인스턴스는 이미 작동하지 않거나 (채널의 오류 상태를 일으켰습니다) 세션 시간 초과 후 사망합니다. 또한 알려진 클라이언트에서 채널을 제거하고 해당 채널에 종속 된 항목을 모두 등록 취소하여 오류가 발생한 채널에서 콜백을 시도 할 때 오류가있는 예외를 처리해야합니다.

+0

나쁜 소식, 그래서 나는 그럼에도 불구하고 모든 :-( 을 코딩 할 것이다이 활성화 세션과 서비스를 사용하는 모든 응용 프로그램에 해결해야 할 필요가 무엇인가를 것 같다. 는 아무도 내가 할 수있는 몇 가지 라이브러리를 알고 있나요 재사용할까요? – Matias