2009-05-03 17 views
3

SOAPを使用してクライアントにエラーをどのように返すべきか混乱します。SOAPによるWCF障害

私はwcfサービスを持っていますが、クライアントがどの技術を使用しているのかよくわからないので、SOAP仕様に固執したいと思います。

私が読んだ限り、フォールトメッセージはこれを処理する最善の方法のようです。

私は私のサービスは、多くの異なる可能な障害を持つ見ることができます:すでに

  • データ範囲エラー「お客様:(唯一の3つの文字を許可するdbのIE)

    • ヌル\は、データエラーに
    • データフォーマットエラーを予想あなたの要求を処理することができません "タイプのエラー

    これらのフォールトごとに新しいオブジェクトを作成し、そのように投げることは適切でしょうか:

    FaultException<NullFault>(nf); 
    FaultException<InvalidDataFault>(idf); 
    FaultException<ArguementFault>(af); 
    FaultException<RangeFault>(rf); 
    

    クライアントは、多くのプロパティを持つ大きなオブジェクトを実質的にすべてのメソッド (つまり、顧客、注文など)に渡しています。

    エラーを処理してクライアントに返信する適切な方法でしょうか?

    メソッドの上の属性に各フォルトを追加する必要はありません。

    IE:

    [OperationContract] 
    [FaultContract(typeof(NullFault))] 
    [FaultContract(typeof(InvalidDataFault))] 
    [FaultContract(typeof(ArguementFault))] 
    [FaultContract(typeof(RangeFault))] 
    void CreateCustomer(Customer customer); 
    

    また、何GenericFaultでしょうか?どのようにビジネスルールのエラーを処理しますか?つまり、顧客が既に存在していて、余りにも多くの広告申込情報を送付していない、その地域に出荷していない、支払い方法が受け付けられていないなど

    この方法が適切であるかどうか、または別の容認された解決策があり、「ビジネスルール」の状況をどのように処理するかを教えてください。

  • 答えて

    2

    障害を返すことは一般的に正しい方法ですが、障害で返された情報をクライアントプログラムがどのように処理するのかも尋ねるべきです。クライアントが障害が発生したことだけを知る必要がある場合、必要なのは単一障害です。この障害には、クライアントがユーザーに表示できるメッセージテキストが含まれている可能性があります。

    クライアントがNullFaultであるかRangeFaultであるかに基づいて異なるアクションを実行する必要がある場合は、別々のフォルトが必要な場合です。しかし、違いがなければ、あなた自身とクライアントプログラムをしばらく時間と労力をかけずに保存して、単一の障害だけを定義します。

    +0

    お返事ありがとうございました。 私は素早くフォローアップの質問: あなたが単一の方法で行くならば、フォールトタイプのenumプロパティを作成することをお勧めしますか(NullReference、Range、InvalidData、BusinessRule、Other)? この列挙型もSOAPメッセージで渡されるかどうか知っていますか? ありがとう、 スティーブン – stevenrosscampbell

    +0

    あなたはそのような列挙型を返すことができますが、クライアントがその情報を見て何かをしなければならないことに留意してください。送信した情報でプログラマチックな何かをするつもりがない場合は、送信しないでください。 –

    +0

    はい、同意します。 私ができることは、彼らにそれについて話し、それに応じてそれを使うことを望むことだと思います。 ありがとう、 スティーブン – stevenrosscampbell

    関連する問題