2016-12-26 8 views
3

私はREST API開発にWCFを使用しています。WCFでエラーを返す適切な方法

私たちは、このメソッドを使用するときに例外が頻繁にスローされた場合には現在、私は、それが

Throw New WebFaultException(Net.HttpStatusCode.Forbidden) 

をクリーンで非常に目に見えるコードを提供するので、以下を使用します。しかし

WebOperationContext.Current.OutgoingResponse.StatusCode 

を設定することで、エラーコードを返すことができます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; } 
} 

は、代わりに例外をスローするには、ブール値で出力を返すことができます。 テレグラムAPIが良い例です。

+0

はい、いいアイデア。しかし、サービスクライアントは、データをアンラップして、ステータスコードチェックでコードをチェックしなければなりません。また、シリアライズのために、新しい契約ごとにKnownTypeでDataに注釈を付ける必要があります。 – RaviVadera

+0

親愛なる@RaviVadera。クライアント側のエラーチェックについては絶対に正しいです。しかしそれは悪いことではありません。非常に一般的です。 Webサービスを呼び出した後に出力を検証する必要があります。 KnownTypeについては、あなたがKnownTypeのコンセプトを理解していなかったと思います。 KnownTypeでDataに注釈を付ける必要はありません。 – David

+0

DataContractの各プロパティにDataMember属性がアノテーションされている限り、KnownTypeは必要ありません。 – RaviVadera

1

あなたが利用することができます:

detailedObjectカスタム応答オブジェクトで、直列化可能でなければなりません
WebFaultException<T>(T detailedObject, HttpResponseCode code) 

参考:http://blogs.msdn.com/b/endpoint/archive/2010/01/21/error-handling-in-wcf-webhttp-services-with-webfaultexception.aspx

+0

はい、それでもアプリケーションクラッシュとみなされ、IISは引き続き迅速なフェールセーフをトリガーします。 – RaviVadera

1

あなたがoutパラメータを使用して、例外メッセージまたはカスタム式でキャッチ例外で設定することができます。サービス・インターフェースで 書き込み:あなたは、サービス・インターフェースにvoidメソッドを使用する場合は

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

関連する問題