2012-05-07 97 views
3

我有使用Ajax一個非常簡單的WCF的Web服務,我在客戶端調用正確的狀態代碼:WCF web服務沒有返回時,響應報頭被修改

這裏是我的web服務:

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

這裏是我的客戶端Ajax調用是這樣的:

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 
}); 

此Web服務失敗每一次,返回的狀態和代碼(因爲它應該!)「500:內部服務器錯誤」。 'myFail'回調函數被激發,因爲它應該。

但是,如果我修改響應頭我的Web服務中,像這樣:

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

然後返回的狀態/代碼是 '200:OK',每一次!

這意味着即使Web服務應該失敗,每次都會觸發'mySuccess'函數。我無法弄清楚爲什麼簡單地將自己的自定義頭添加到響應將以這種方式覆蓋返回狀態。

有什麼我失蹤?

+0

我能夠重現該行爲。看起來像一個錯誤。 –

+0

那很尷尬。有沒有其他方法可以將一些響應傳遞迴客戶端 - 這不涉及實際返回值的擺弄? – John

+0

我不這麼認爲。客戶端看到的只是包含2個部分的實際HTTP響應:響應頭和主體。 –

回答

0

一個選項是拋出WebFaultException一個有意義的HTTP狀態和消息。 示例:throw new WebFaultException("Invalid request received.", HttpStatusCode.BadRequest);
BadReuqest代碼是400.