1

いくつかの操作を行う WCF サービスがあります。各操作には、次のような「PrincipalPermission」タグがあります。

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

問題は、ユーザーが「管理者」ロールの一部ではない場合、サービスが例外をスローすることです

プリンシパル許可のリクエストに失敗しました

これにより、クライアントのチャネルが「障害」状態になります。

これをどうにかキャッチして、クライアントに「障害」メッセージを送信できるようにしたいのですが、

これにより、クライアントは、チャネルを失敗させることなく、すべきでないことをしようとしたことを知ることができます!

操作内で「try-catch」ブロックを使用しようとしましたが、役に立ちませんでした。例外は、操作自体の「外部」で発生します。

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

4

1 に答える 1

1

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

クライアントのチャネルが障害状態になることに関するもう 1 つの注意事項: クライアントから実行する作業単位ごとに新しいクライアント オブジェクトを作成することをお勧めします。クライアント オブジェクトを再利用すると、この種の問題が発生します。

于 2012-05-06T12:37:10.983 に答える