2011-06-18 13 views
1

システムのオーバーライドされたValidate()メソッドを使用してカスタムUserName検証を使用するようにWCFサービスを構成しました。 IdentityModel.SelectorsUserNamePasswordValidatorクラス。WCFカスタム認証で例外を処理する方法は?

検証が失敗した場合、私はSecurityTokenValidationExceptionを投げます。

私のクライアントでは、クライアントでは、CommuinicationExceptionというメッセージが表示されます。リモートサーバーからエラー:NotFoundが返されました。

クライアント側でこの例外を処理する最善の方法は何ですか?

私の検証コード:

if (user == null || (Environment.TickCount - user.LastCall) > 300000) 
{ 
    if (!LoginUser.ValidateUser(userName, password)) 
    { 
     throw new SecurityTokenValidationException("Usuário/Senha inválido"); 
    } 
} 

答えて

2

サービスから例外を投げるには(私は信じている)チャンネルを障害し、クライアントが非記述的メッセージが表示されます。これは仕様によるものです.WCFはサービス側で例外を「隠す」。

クライアントにエラーを返して、クライアントがそれを処理できるようにするには、FaultExceptionを使用する必要があります。操作にFaultContractを指定することができ、それはクライアントに返されます。

WCFでエラー処理を検索すると、たくさんの例が得られます。私は時間が足りないか、いくつか追加したいと思いますが、うまくいけば、これはあなたが正しい方向を指すようにします。

編集FaultExceptionを投げる

throw new FaultException("Usuário/Senha inválido"); 

にライン

throw new SecurityTokenValidationException("Usuário/Senha inválido"); 

に障害が発生しているからの通信を防ぐことができます

の変更を追加する - その後、クライアントは例外を受け取ることができ、それが妥当性検査の失敗によるものであることを知り、その点から何をすべきかを決定する(再試行、ユーザにcrの再入力を促すエデュメンタンスなど)。

これは非常に単純な変更であり、その例を示します。私が下記に投稿したリンクは、より詳細な情報を提供します。

+0

ここではいくつかのリンクを見ていきます: http://stackoverflow.com/questions/2379917/wcf-exception-handling-strategies http://stackoverflow.com/questions/3979010/wcf-exception-handling ます。http://blogs.msdn。 com/b/pedram/archive/2008/01/25/wcf-error-handling-and-some-best-practices.aspx http://www.extremeexperts.com/Net/Articles/ExceptionHandlingInWCF.aspx – Tim

+0

ありがとう、ティム!今はうまくいく。 –

0

最後の通話を確認したユーザーオブジェクトをどのように識別していますか? LINQシングルコールを使用していますか?もしそうであれば、ユーザが見つからず、サーバがSecurityTokenValidationExceptionではなくその時点で認証を中止する場合は例外がスローされます。

関連する問題