2009-12-11 5 views
1

관리자가 내 서비스에 로그온하면 자동 또는 수동으로 특정 요구 사항을 충족시키는 (또는 충족하지 못하는) 세션 연결을 끊을 수 있습니다. 예외를 던지는 것은 모든 리소스가 릴리스되므로 간단하고 효과적인 솔루션처럼 보입니다.하나의 WCF 세션이 다른 세션에서 예외를 throw 할 수 있습니까?

로컬 bool 필드를 사용할 수 있습니다.이 필드가 true이면 다음에 메소드를 호출 할 때이 사용자의 연결을 끊지 만 우아한 해결책은 아닌 것 같습니다.

, 그것은 내가 이미 해당 세션에 액세스 할 수 없도록하기 위해) OperationContext.Current.Channel.Close를 (사용하거나 중단 할 수 있습니다 나타났습니다로, 예외를 throw 할 필요가 없습니다.

wcf에서 이것을 수행하는 "표준"방법은 무엇입니까?

+0

새로운 웹 요청을 즉시 시작하지 못하도록 세션을 끝내더라도 고려해야 할 사항 중 하나는 무엇입니까? –

+0

글쎄, 당신 disconecting하기 전에 경고를 얻을 수도, 또는 귀하의 사용자 이름 등 일시적 금지령을받을 수도 ... – avance70

답변

1

주어진 '세션'내에서 다른 세션 (즉, 인스턴스 컨텍스트)으로 무엇을 할 수있는 기본 방법이 없다고 생각합니다.

그러나 서비스 또는 계약 동작과 함께 IChannelInitializer 인터페이스를 사용하여 서비스에 연결하는 클라이언트를 추적 할 수 있습니다. 이렇게하면 각 고객의 관련 채널에 액세스 할 수 있습니다.이 채널은 원하는 경우 닫을 수 있지만 통신 문제와 같이 클라이언트 측에서 반드시 유익한 오류를 생성하지는 않습니다.

또 다른 옵션은 서비스에 액세스하는 클라이언트를 제어 할 수있는 경우 콜백을 조사하는 것입니다. 위에서 언급 한 클라이언트 추적을 콜백과 함께 사용하면 실제로 클라이언트가 더 정상적으로 자체 채널을 닫고 잠재적으로 사용자에게 어떤 일이 일어 났는지 알릴 수 있습니다.

+0

예, 그 하나, 고마워요 : D - 해결책을 좀 더 설명하기 위해 잊어 버렸습니다, 방금 추가했습니다 : 서비스에서 SessionMode = SessionMode.Required 및 콜백 연결 해제 메소드에서 [OperationContract (IsTerminating = true)]. – avance70

관련 문제