2016-12-26 39 views
3

我正在使用WCF進行REST API開發。在WCF中返回錯誤的合適方法

我們可以通過設置

WebOperationContext.Current.OutgoingResponse.StatusCode 

目前我使用下面的返回錯誤代碼,因爲它提供了更清潔,多可見代碼

Throw New WebFaultException(Net.HttpStatusCode.Forbidden) 

但是,使用這種方法時,如果異常頻繁拋出,IIS將其視爲快速失敗並根據快速失敗保護策略停止應用程序池。

這是返回錯誤的正確方法,我應該修改還是關閉Rapid Fail策略或者有沒有更好的方法?

回答

1

你可以這樣創建一個響應對象:

public class WebServiceOutput 
{ 
    public object Data { set; get; }   
    public bool HasError { set; get; } 
    public string Code { set; get; } 
    public string Description { set; get; } 
} 

然後,而不是拋出異常,你可以用布爾值返回輸出。 telegram bot API就是一個很好的例子。

+0

沒錯,好主意。但是,服務客戶將不得不打開數據並使用狀態碼檢查對代碼進行額外的檢查。對於序列化,我們還需要爲每個新合約使用KnownType註釋數據。 – RaviVadera

+0

親愛的@RaviVadera。您對客戶端的錯誤檢查絕對正確。但它並不是一件壞事。它非常普遍。我們需要在調用Web服務之後驗證輸出。但關於KnownType,我想你並不瞭解KnownType的概念。你根本不需要用KnownType標註數據。 – David

+0

因此,只要DataContract的每個屬性都使用DataMember屬性註釋,我們就不需要KnownType,對嗎? – RaviVadera

1

您可以使用輸出參數,並在異常消息或自定義表達式捕獲異常設定。 寫在服務接口:

List<MyClass> GetResults(p1, out string message); 

如果你想使用的服務界面處的空隙的方法,你可以改變方法的返回類型爲字符串,並把錯誤消息returen。

public string SaveResults(List<MyClass>) 

之後,使用定義服務的方法是這樣的:

public List<MyClass> GetResults(p1, out string message) 
{ 
    string message; 
    OperatorClass obj= new OperatorClass(); 
    return obj.GetResults(p1,out message); 
} 
+0

這將如何與JSON響應一起工作? – RaviVadera