System.IdentityModel.Selectors.UserNamePasswordValidatorクラスのオーバーライドされたValidate()メソッドを使用してカスタムUserName検証を使用するようにWCFサービスを構成しました。WCF UserName認証とフォルトコントラクト
契約のすべてのメソッドはFaultContractAttributeで修飾され、カスタムSOAPフォールトを返すことができます。
FaultExceptionをスローするとき<T>(TはFaultContractAttributeで指定された型です)、すべて正常に動作し、応答XMLにカスタムフォールトが発生します。私がしようとすると、ユーザー名の認証クラスのオーバーライドされたvalidate()メソッドにFaultException <T>を投げる場合
しかし、私は次のような理由で、一般的なSOAPフォールトを取得:
「このフォールトの作成者がなかった
理由を指定しないでください。 "私は、コードを変更した場合しかし、のような一般的なSOAPフォールトをスローします
throw new FaultException("Authentication failed.");
私は、少なくとも取得する「認証に失敗しました。」理由要素の中で。
私の質問は以下のとおりです。彼らは、サービス実装の範囲内にあると検証()でスローされている場合
- はなぜFaultException <T>例外が同じように扱われていませんか?
- Validate()メソッドでスローされる例外を、コントラクトメソッドで指定されたFaultContractAttributeに準拠させることはできますか?
大変助かりました。自分の推測では、メッセージが契約のどのメソッドにも関連付けられる前に認証が行われるため、FaultContractAttributeには関連付けられていませんが、これを確認し回避策を与える記事は非常に便利です。
タリ
感謝。どんな解決策ですか?私はまだ2013年3月に答えを探しています。 –