2010-12-20 25 views
1

1)私は、WCFサービスダイナミックWCFサービス契約は

2)クライアント・アプリケーションは、このWCFサービス

に資格情報を送信することができるはずですへの参照を追加するクライアントアプリケーションを持つようにしたいです3)資格情報のアクセス許可に基づいて、WCFサービスは適切なInterface(サービス契約)をクライアントに返す必要があります。

4)クライアントはそれを消費します。

私は、エンティティが「資産」を言うと、その上にすべての可能な操作に関連するいくつかのメソッドを持って定義するサーバーでクラスを、肝炎とし

Class Asset 
{ 
Add() 
{ 
..... 
} 

Edit() 
{ 
...... 
} 

Flag() 
{ 
...... 
} 

Deploy() 
{ 
........ 
} 
} 

今私は、「資産」にいくつかのアクションを実行しようとするクライアントアプリケーションを持っています。しかし、クラスDLL全体をクライアントに与えることは望ましくありません。代わりにインターフェイスだけを提供したい。どのクライアントがそれを使用して適切なアクションを呼び出すことができます。

ここで問題は、クライアントアプリケーションがWCFサービスへの参照を追加することです。 Assetクラスの適切なインターフェイスをWS *または認証資格情報に基づいてクライアントに返す方法.NET 4.0では、サービス契約を動的に作成して返す簡単な方法がありますか?

//following is pseudo code 
If(Current.User.Role == 'Admin') 
{ 
return IAssetsForAdmin; 
} 
else 
{ 
return IAssetsForGeneralUser; 
} 

Interface IAssetForAdmin 
{ 
Add(); 
Edit(); 
Flag(); 
} 

Interface IAssetForGeneralUser 
{ 
Flag(); 
} 

答えて

1

これはできません。ユーザーロールごとに異なる契約を返すことはできません。さらに、WCFだけでなく、Webサービスアーキテクチャ全体や.NETアーキテクチャに関連するだけでなく、新しい契約の定義=新しいサービス参照の定義=アプリケーションの再コンパイルも含まれます。

しかし、これはロールベースのセキュリティで簡単に解決できます。認証されたユーザーは、選択された操作のみを実行できるようになる役割のメンバーになります。これを実現するには、PrincipalPermission(要求の要請)またはPrincipalPermissionAttribute(許可の宣言的要求)を使用します。権限のないユーザーがセキュリティで保護されたメソッドSecurityExceptionを呼び出すと、例外がスローされます。必要なのは、ロールが認証されたユーザーに割り当てられるように、WCFセキュリティモデルを適切に構成することだけです。

関連する問題