2012-05-07 3 views
3

내가 Ajax를 사용하여 내가 클라이언트 측에서 호출 매우 간단한 WCF 웹 서비스를 수정 올바른 상태 코드를 반환하지 않습니다 :WCF의 웹 서비스는 응답 헤더가

public string TestService() { 
    throw new Exception(); 
    return ""; 
} 
: 여기

내 웹 서비스입니다

var mySuccess = function(result,statuscode,xhr){ 
    alert('success'); 
} 

var myFail = function(result,statuscode,xhr){ 
    alert('failure'); 
} 

$.ajax({ 
    type: 'Post' 
    contentType: "application/json; charset=utf-8", 
    url: '../myService.svc/TestService', 
    data: '', 
    dataType: "json", 
    success: mySuccess, 
    error: myFail 
}); 

이 웹 서비스마다 실패의 상태 코드 반환 (예상대로!) '500 : 내부 서버 오류'여기

내 클라이언트 측 AJAX 호출이 모습입니다. 'myFail'콜백 함수는 필요한대로 실행됩니다. 내가 지금처럼, 내 웹 서비스 내에서 응답 헤더를 수정하면

그러나 :

public string TestService() { 
    WebOperationContext.Current.OutgoingResponse.Headers.Add("token", "1"); 
    throw new Exception(); 
    return ""; 
} 

는 반환 된 상태/코드는 '200 : OK'이며, 모든 시간!

즉, 웹 서비스가 실패 할 때조차도 'mySuccess'기능이 매번 실행됩니다. 내 자신의 사용자 지정 헤더를 응답에 단순히 추가하는 것이 반환 상태를이 방법으로 덮어 쓰는 이유를 알 수 없습니다.

누락 된 것이 있습니까?

+0

동작을 재현 할 수 있습니다. 버그 같아. –

+0

그때 어색해. 클라이언트에게 몇 가지 응답을 다시 전달하는 다른 방법이 있습니까? 실제 반환 값을 무시하는 것은 아닙니다. – John

+0

나는 그렇게 생각하지 않는다. 클라이언트가 보는 모든 것은 응답 헤더와 본문의 두 부분으로 구성된 실제 HTTP 응답입니다. –

답변

0

의미있는 HTTP 상태 및 메시지를 사용하여 WebFaultException을 던지십시오. 예 : throw new WebFaultException("Invalid request received.", HttpStatusCode.BadRequest);
BadReuqest 코드는 400입니다.

관련 문제