2014-01-25 1 views
0

WCF 서비스 메서드 내에서 클라이언트의 채널 오류를 catch 할 수 있습니까? 현재, 내가 통해 채널 오류를 잡을에만 수 있어요 :서비스 방법 내에서 채널 오류를 잡아 먹습니까?

OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Faulted); 

그러나, 나는 서비스 방법을 중단하고 싶습니다 (즉, 예외를 throw) 응답을 클라이언트에 제공 할 수없는 경우. 현재 내 서비스는 채널에 오류가 발생했지만 (Faulted 이벤트에 따라) 아무 것도 던지지 않고 클라이언트에 응답을 계속 보냅니다.

추가 참고 사항 : netTcpBinding과 함께 안정적인 세션을 사용하고 있지만 서비스가 응답을 보내고 클라이언트가없는 경우에도 예외가 발생하지 않습니다.

답변

0

클라이언트가 없을 때 서비스에서 예외가 발생하도록하려는 이유가 무엇입니까?

WCF는 본질적으로 우편 시스템과 마찬가지로 메시징 시스템입니다. 귀하가 고객으로서 저에게 편지를 보내면, 귀하 (귀하의 주소)에 응답 할 것입니다. 나는 당신이 아직 거기에 살고 있고 당신은 여전히 ​​살아남아 나의 반응을 읽을 것이라고 생각합니다.

저녁 뉴스에서 트럭으로 도망 쳤다 고해도 (나는 희망을 가지지 않는다 ;-)) 나는 내 대답을 쓰고있다. 왜 나는 그 남자에게 내 반응을 보낼 수 없다는 소리를 내야 만 할까? 내 말을들을 사람이 없을 것입니다. 그리고 당신은 더 이상 상관하지 않습니다 ...

신뢰할 수있는 세션은 중간에 여분의 승인 단계를 추가하기 만하면됩니다. 당신은 저에게 편지를 보내고, 나는 당신의 편지를 받았습니다. 나는 나중에 대답 할 것입니다. 그 답장을받지 못하면 원래 편지를 다시 보내고 나에게 같은 편지를 다시 보냅니다. 그래서 나는 다시 대답 할 것이다. 응답에 대한 동일한 이야기. 귀하의 '귀하의 답변을 얻었습니다.'라는 메시지가 표시되지 않으면 다시 응답하고, 또 다시 응답하려고합니다. 마침내 포기할 때까지 ... 저녁 뉴스를 보았거나 다시 같은 편지를 쓰는 것에 지쳤습니다. 그러나 최종 결과는 같습니다. 더 이상 내 말을 듣지 않기 때문에 아무에게도 소리 지르는 사람이 없습니다 ...

이야기는 양면 바인딩에서 다릅니다. 그런 다음 서버가 메시지를 받으면 통신이 종료됩니다. 그러면 역할이 바뀝니다 (서버는 클라이언트가되고 클라이언트는 서버가됩니다). 서버 (현재 클라이언트)는 반환 채널의 새 통신을 클라이언트 (이제 서버)로 보냅니다. 그리고이 호출은 메소드 호출에 의해 트리거되기 때문에 서버 측에서 예외가 발생하면 해당 메소드 호출이 실패합니다.

관련 문제