2010-12-20 120 views
1

1)我想有,增加了一個參考WCF服務動態WCF服務合同

2)客戶端應用程序應該能夠發送憑據,此WCF服務

客戶端應用程序3)基於憑據權限,WCF服務應該返回適​​當的接口(服務合同)到客戶端

4)客戶端然後消耗它。

例如假設我甲肝在服務器一類,它定義了一個實體說「資產」,並有相關的所有可能的操作的一些方法在它

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

Edit() 
{ 
...... 
} 

Flag() 
{ 
...... 
} 

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

現在我有一個希望在「資產」執行某些動作的客戶端應用程序。但我不想把整個類的DLL給客戶端。而只想給予接口。哪個客戶端可以使用並調用適當的操作。

現在的問題是客戶端應用程序添加對WCF服務的引用。如何根據其WS *或認證憑證將適當的Asset類接口返回給客戶端。 .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安全模型,以便將角色分配給經過身份驗證的用戶。