2012-05-06 9 views
0

私はいくつかの操作でWCFサービスを持っています。 各操作は、「PrincipalPermission」タグ、このような何かしています「プリンシパルアクセス許可の要求に失敗しました」というWCFクライアントのフォールトを防ぐ方法を教えてください。

[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")] 
public ProductsDto GetAllProducts() 
{ 
    // Do operation here ... 
} 

問題がある - ユーザーがロール「Administratir」の一部でない場合 - サービスは、プリンシパルの例外

リクエストを投げます許可が失敗しました

これは、クライアントのチャネルを「フォールト」状態に破損します。

私は何とかこれをキャッチし、クライアントが、彼はチャンネルをフォルトせずに、彼はいけない何かをしようとした知っているように、クライアントに「障害」というメッセージ、

を送信できるようにしたいです!

私は操作の中で 'try-catch'ブロックを使用しようとしましたが、助けにはなりませんでした。 例外は、操作自体の外部で発生します。

どうすればこの問題を解決できますか?

答えて

1

特別なインターフェイスIErrorHandlerが実装でき、例外を処理するためにWCFサービスに接続できます。 IErrorHandlerを使用すると、セキュリティ例外とシリアル化コードによってスローされた例外の両方を処理できます。

クライアントのチャネルのフォルト状態への別の注記:クライアントから実行する作業単位ごとに新しいクライアントオブジェクトを作成することをおすすめします。クライアントオブジェクトを再利用すると、この種の問題が発生します。

+0

60秒ごとに発生するポーリングメカニズムがあり、クライアントがユーザー名とパスワードを入力する必要があり、それらを保存したくないため、リクエストごとにクライアントを開きたくないクライアントのメモリに保存します。 IErrorHandlerが私の問題を解決する方法についてもう少し詳しく説明できますか?どのようにPRINCIPALエラーをキャッチし、クライアントにフォールトを起こすことなく適切なメッセージを送信できますか? –

関連する問題