2012-10-25 3 views
3

여기 내 서비스 코드가 있습니다. 모든 베스트 프랙티스 기사에서 제안하는 것처럼 WebFaultException 형식으로 오류가 발생합니다.ASP.NET에서 오류를 반환하는 모범 사례 WCF의 RESTful 웹 서비스

{ "ExceptionDetail"하십시오 http://localhost:1389/API.svc/MyMethod 내가 할 모든 요청을 보내 지금

[ServiceContract(Namespace = "")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class API 
{ 
    [OperationContract] 
    [WebGet()] 
    public int MyMethod() 
    { 
     throw new WebFaultException<string>("TESTERROR", HttpStatusCode.BadRequest); 
    } 
} 

이 JSON 객체입니다 "예외 유형"널 (null) : 널 (null) "메시지": "서버이었다 내부 오류로 인해 요청을 처리 할 수 ​​없음 오류에 대한 자세한 내용은 클라이언트에 예외 정보를 다시 보내려면 서버의 IncludeExceptionDetailInFaults (ServiceBehaviorAttribute 또는 구성 동작)를 설정하거나 Microsoft .NET Framework 3.0 SDK 설명서에 따라 추적하고 서버 추적 로그를 검사하십시오. ","StackTrace ": null}

내 web.config에서 includeExceptionDetailInFaults을 활성화하려고 시도했지만 메시지가 조금 바뀌지 만 여전히 "테스터 (TESTERROR)"가 보이지 않습니다!

답변

1

, 당신은 SVC는이를 추가해야 밝혀 파일 : Factory="System.ServiceModel.Activation.WebServiceHostFactory"

단지이 떠나

와의 Web.config에서 <behaviors> 부분을 제거 :

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="MyAPI"><endpoint address="" binding="webHttpBinding"/></service> 
    </services> 
</system.serviceModel> 
내가 예를 들어 HttpContext.Current를 사용하여, 내가 원하는 무엇이든 만들 수 있습니다 알고
1

나는 어떤 일이 일어나고 있다고 생각한다. 어떤 종류의 복귀가 일어나지 않고 단지 응답 코드 만 있다고 생각한다. 그래서 서버는 추가 정보없이 500을 던집니다. 예외 세부 사항을 로그 파일에 출력하면이 기능을 계속 사용할 수 있습니다.

일반적으로하는 일은 메시지와 클라이언트에 반환 할 코드가 포함 된 직렬화 가능 응답 개체를 만드는 것입니다. 그런 다음 예외를 잡아서 응답 객체를 작성한 다음이를 클라이언트에 반환합니다. 그런 다음 클라이언트는 읽을 수있는 XML 페이로드를 수신합니다. 이 200 (OK) 이외의 경우에 따라서, 나는 그것이 고장 고려하고 (또는 나는 XML에 포함 된 세부 사항을 적절한 메시지를 표시

<ServiceError> 
    <ServerCode> 
     500 
    </ServerCode> 
    <ApplicationCode> 
     9100 
    </ApplicationCode> 
    <Message> 
     API key is expired. 
    </Message> 
</ServiceError> 

UPDATE :. 지금까지 JSON 표준으로

나는 실제 문서 표준을 본 적이 간다 내가 본 것은 사실상 표준의 종류, 또는 오히려 추세이다. 좋아

{ 
    "status": "success", //or "failed" 
    "data": { 
    //any app specific payload here 
    }, 
    "message": null //or additional info here (i.e. exception details) 
} 
+0

...하지만 무엇 우리가 오류를 반환하는 문서화 된 방법 JSON RESTful WCF 서비스? – Alex

+0

공식적인 표준 응답이 없다고 생각합니다. 그러나 공통 응답 (편집 내 대답) – Sinaesthetic

+0

yap, 편집 해 주셔서 감사합니다,하지만 - 만약 거기에 어떤 종류의 데이터를 반환 할 수있는 .NET에서 기본 제공 메커니즘을 의미합니다. 추측하지 마라. .. Ok, 나는 질문을 닫기 전에 2,3 일을 기다릴 것이다. 감사합니다. – Alex