2014-05-20 3 views
1

우리는 webhttp 바인딩을 사용하여 WCF 서비스를 제공합니다. 사용자가 인증을 받고 메소드가 호출됩니다. 이 방법에서는 사용자가 전화를 걸 수 있는지 여부를 알기 전에 사용자와 관련된 다양한 설정과 요청에 대한 특정 정보를 확인합니다.WCF에서 승인되지 않은 요청을 처리하고 있습니까?

WCF이므로 일종의 FaultException을 던져야한다고 생각하지만 모범 사례가 있는지는 분명하지 않습니다. 표준 오류 예외가 무단 위해 거기에 1) :

나의 생각은 내가 던지는 무슨 예외 알면, 나는 403

두 질문에 제대로 헤더를 설정합니다 이는 IErrorHandler를 추가 거라고 있습니다 요청? 즉 403 상태의 HTTP 상태 코드와 동일합니까? 2) 내가 던지는 예외를 처리하고 응답 코드를 403으로 변경할 수 있습니까? 사용자 정의 오류 메시지를 전달할 수 있습니까? catch에서 작업 컨텍스트를 사용하여 머리글을 설정하는 것이 클라이언트에 전파되지 않는다는 일부 게시물을 보았습니다. 이상적으로

나는, 기존의 WCF 오류 관리는 바인딩 webhttp 사용하기 때문에

답변

0

나는 FaultException에서 사용자 지정 예외를 파생시킨 다음 IErrorHandler를 추가하여 적절한 헤더를 설정했습니다.

이것은 두 세계에서 가장 좋은 것으로 보입니다. 이 코드는 WCF에서 사용 된 예외를 파생시킵니다. http 바인딩과 관련된 모든 처리는 비즈니스 로직 외부의 IErrorHandler를 통해 수행됩니다.

1

"당신은 사용자를 추가하려면 관리자 그룹의 일부 여야합니다"와 같은 추가 정보 (403)의 상태를 설정할 수있을 것 여기에 해당되지 않으며 WebFaultExceptionWebFaultException<>을 사용하는 것이 더 좋습니다.

Public string MyOperation() 
    // Operation logic 
    // ... 
    throw new WebFaultException<string>("You must be part of the administrators group to add a user", HttpStatusCode.Forbidden); 
} 

당신은 그것이 HTTP (REST와 같은) 서비스를 핵 물질 때 표준 HTTP 상태 코드를 사용하는 것이 매우 중요하다고 생각한다.

+1

바인딩에 바인딩하면 안되는 WCF 서비스를 취하고 WebFaultException을 추가하는 것에 대한 생각은 싫다. 내 생각에 몇 가지 표준 WCF 무단 된 예외를 throw하고 끝점에 바인딩 할 수 IErrorHandler에서 처리 할 수 ​​있습니다. 그런 식으로 비즈니스 로직 코드는 webHttpBindings에 바인딩되지 않습니다. – bpeikes

0

적어도 wshttpbinding 및 basichttpbinding을 사용하여 오류 예외를 throw하면 웹 서비스가 실패 할 수 있으므로이 방법을 사용하지 않는 것이 좋습니다.

인증되지 않은 사용자에게 메시지를 보내려면 적절한 것으로 보이는 400 개의 응답 중 하나로 응답을 설정하여 HTML 응답을 보내면됩니다.

경험상, 오류 예외는 실제 처리 오류가 아닌 사용자 작업에 대한 제어 된 응답 인 경우에도 웹 서비스가 실패하게 만듭니다. 나는 그들이 진짜 처리 예외를 예약해야한다고 생각한다.