2011-03-07 6 views
1

UI에서 BLL/DAL과 통신하기 위해 WCF를 사용하여 REST 서비스를 만들었습니다. 자, 이제 REST에서 전역 처리 방식을 통해 예외 처리를 구현하고 싶습니다. HTTPClient를 사용하여 클라이언트에서 REST와 통신합니다. 다음은 방법을 다음, 내가 구현 한 예외 처리 :REST에서 예외 처리

접근 1 :

OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse; 
response.StatusCode = System.Net.HttpStatusCode.Unauthorized; 
response.StatusDescription = ex.Message; 
success = false; 

접근법 2 :

throw new WebProtocolException(HttpStatusCode.NotFound, ex.Message, null); 

하지만 어떻게 든 내가 클라이언트 측에서 그들을 잡을 수 없습니다입니다. 전 세계적으로 서비스가 제기 한 예외를 처리하기 위해 몇 가지 지침을 제시하십시오.


나는 예외에 대해 사용자에게 통지하기 위해 UI하기 위해 서비스에서 오류 코드 및 오류 메시지와 함께 WebProtocolException (접근법 2)를 던지는하고있다. UI 측에서 오류 코드를 수신 할 수 있지만 오류 메시지 또는 세부 사항을 가져올 수 없습니다.

다른 서비스 (.svc 확장자)를 만들고 서비스의 마크 업에 다음 줄을 추가했습니다. "Factory = 'Microsoft.ServiceModel.Web.WebServiceHost2Factory'" 이제 클라이언트 측 (UI)에서 오류 코드와 함께 오류 메시지를받을 수 있습니다.

누구나 .svc 파일 대신 클래스 파일 인 기존 서비스에서 WebServiceHost2Factory 메서드를 사용하는 방법을 알 수 있습니까?

모든 제안 사항을 높이 평가할 것입니다. 감사합니다.

+0

나쁜 소식은 소지하지 못하게되지만 WebServiceHost2Factory는 더 이상 사용되지 않는 REST Starter Kit에 있으며, 라이센스는 Net 4가 출시되는 지금 효과적으로 사용되지 않습니다. –

답변

1

HttpClient는 응답이 "성공"하지 않은 경우 예외를 throw하지 않습니다. 당신이 정말로 예외가 클라이언트 측에서 슬로우 싶은 경우에, 단지 클라이언트의 상태 코드를 확인, 그렇지 않으면

response.EnsureResponseIsSuccessful(); 

를 호출하고 그 값에 따라 수행 할 작업을 결정합니다.

서버에 예외를 throw 할 수 없으며 예외가 클라이언트에 전파 될 것으로 예상됩니다. HTTP에는 예외 개념이 없습니다.

+0

"response.EnsureResponseIsSuccessful"메서드를 이미 호출하고 있습니다. 상태 코드를 확인할 수는 있지만 서비스에서 클라이언트로 전달한 상태 설명을 확인할 수 없습니다. 서비스에서 발생한 정확한 오류를 고객에게 알리기 위해 어떻게 자세한 오류 메시지를 고객에게 전달해야하는지 제안 해주십시오. –

+0

@Anil C Ahh, 그것은 HTTP 스택 구현의 버그라고 생각합니다. 그것은 http://wcf.codeplex.com의 다음 세대 HttpClient에서 수정되었으며, 지금도 "ReasonPhrase"라는 이름을 가지고 있습니다. –

+0

@Anil C 상태 설명을 사용하는 대신 응답 본문을 사용하여 문제를 설명하는 것이 가장 좋은 이유는 무엇입니까? 이것이 RFC2616에서 권장하는 것입니다. –