2009-04-15 8 views
1

WCF 서비스에 FaultException을 사용하는 방법을 소개합니다.WCF 예외가 발생하면 CommunicationException이 발생합니다.

public void ThrowException() 
    { 
     try 
     { 
      throw new ApplicationException("This is a test exception"); 
     } 
     catch (ApplicationException ex) 
     { 
      throw new FaultException<ApplicationException>(ex, "Test reason"); 

     } 
    } 

한발 앞서 건너 뛰기 :

이 내가 서버에서 다음 함수를 만든 것입니다 테스트합니다. 이걸 실행하면 정상적으로 작동합니다.

그러나 디버거 (VS2008)를 사용하고 코드가 catch on 블록에서 중단되도록 (break on exception 또는 step in을 사용하여) 내 클라이언트가 CommunicationException을 생성합니다. http://social.msdn.microsoft.com/forums/en-US/wcf/thread/d1ae669f-9a62-4628-86c1-c15ff4068843/

질문 : 나는이 포럼 게시물 발견이 조사

왜이 문제를보고하고를 디버깅 할 경우에만 (나는 다른 사람들이하지 않는 가정)? 어떻게이 행동을 피할 수 있습니까?

+0

필자의 코드는 Exception.Data를 보지 않으며, 조사 창에 없었 음을 확인하고 조사 식, 자동 및 지역 창을 닫습니다. – MattH

+0

나는 같은 문제가 있었는데, 나는 한계로 인해 WCF를 버렸을 때 그것을 어떻게 해결했는지 기억하지 못한다.하지만 web.config에서 서비스의 설정과 관련이 있다고 생각한다. 내 제안은 오픈 바이올린이며 모든 요청이 올바르게 작동하는지 확인하십시오. –

+0

CommunicationException의 세부 사항은 무엇입니까? 전체 예외를 포착하여 ex.ToString()을 표시 한 다음 "throw;"를 사용하여 게시하십시오. –

답변

1

나는 이것을 수정/해결책이라고 부르지 않겠지 만, 상황에 맞는 해결 방법이 있습니다.

내가 말했듯이 WCF 예외 처리를 막 시작 했으므로 IErrorHandler은 메서드 수준의 try/catch보다는 제 예외를 처리하는 더 좋은 방법입니다.

디버거가 ProvideFault 구현을 뛰어 넘기 때문에 디버거는 예외를 찾지 않으므로 CommunicationException이 발생하지 않습니다.

이것은 현재 작동하지만 특정 예외를 제공하려는 경우가있을 수 있으므로 ProvideFault를 통해 전달됩니다.

관련 문제