2012-03-08 60 views
8

このようFaultException<CustomFault>を投げる:私は、次の取得WCFサービスからFaultExceptionをスローすると<T>が発生しました。このフォルトの作成者は理由を指定しませんでした。

throw new FaultException<CustomFault>(new CustomFault("Custom fault message")); 

:「このフォールトの作成者が理由を指定していません」今this MSDN article一つに記載 はFaultReason

を使用する必要はありませんが、私には、以下のサービス契約があります。

FaultReason他を使用することは必須であることを示唆しているMSDNの記事にコメントはあり
[OperationContract] 
[FaultContract(typeof(CustomFault))] 
CustomType[] SomeMethod(int someParameter); 

[DataContract] 
public class CustomFault 
{ 
    private string report; 

    public CustomFault(string message) 
    { 
     this.report = message; 
    } 

    [DataMember] 
    public string Message 
    { 
     get { return this.report; } 
     set { this.report = value; } 
    } 
} 

しかし、他のいくつかの場所で私は人々があなたが必要でない限りFaultReasonを使用すべきではないと主張することを見てきました。

私の質問は次のとおりです。 FaultReasonを使用することは本当に必須ですか?そうでない場合、どうすればFaultExceptionを投げるときに発生した例外を防ぐことができますか?

EDIT

this articleからサンプルプロジェクトを実行することにより、私はexcact同じ動作を取得します。おそらく、.NETのアップデートによってドキュメント/サンプルが更新されていないことが原因である可能性があります。

+0

WCFで 'FaultException 'を投げたときは、私は 'Reason'を設定していないので問題はありませんでした。それがあなたのために働いていない理由について何の光も出せません、申し訳ありません。 – AakashM

+0

VSデバッガを接続せずにサービスを呼び出すと例外が発生しますか? –

+0

いいえ、私はしません。おそらく、デバッガの処理されない例外レベルの問題です。しかし、ドキュメントが例外を引き起こすフォールト・ハンドリング戦略を使用していることが私には間違っているようです。( –

答えて

9

エラー理由が必要です詳細はです。


のfaultString faultStringの要素は、人間が読み取り可能な説明を提供することを意図している:

WCFはthe SOAP specificationによって必要とされるSOAPフォルトの<faultstring>要素を移入するFaultException.Reasonプロパティの値を使用しアルゴリズムの の処理を目的としたものではありません。 [...]これはSOAPフォールト要素に存在しなければならず、 は少なくとも フォルトの性質を説明するいくつかの情報を提供しなければならない(SHOULD)。 WCFサービスからFaultExceptionを投げたときに

したがって、あなたは、故障の原因を提供する必要があります。

+0

それは意味がありますが、私がウェブ上で見つけた例とドキュメントはすべてこれを無視しているようです –

+0

完全なサンプルプロジェクトhttp://msdn.microsoft.com/en-us/library/ee942778.aspx FaultExceptionクラスのドキュメント:http://msdn.microsoft.com/ ja-us/library/ms576199aspx –

+0

これはVSデバッガで選択されたブレークオプションの問題のようです。 –

関連する問題