1)我希望客户端应用程序添加对WCF服务的引用
2)客户端应用程序应该能够向此WCF服务发送凭据
3)基于凭证权限,WCF服务应将适当的接口(服务合同)返回给客户端
4)客户然后消费它。
e.g。假设我在服务器上有一个类,它定义一个实体说'资产',并且有一些与之相关的所有操作相关的方法
Class Asset
{
Add()
{
.....
}
Edit()
{
......
}
Flag()
{
......
}
Deploy()
{
........
}
}
现在我的客户端应用程序想要对“资产”执行某些操作。但我不想将整个类DLL提供给客户端。而是想只给出界面。哪个客户端可以使用它并在其上调用适当的操作。
现在问题是客户端应用程序添加对WCF服务的引用。如何根据其WS *或身份验证凭据将Asset类的适当接口返回给客户端。 .Net 4.0是否提供了动态创建和返回服务合同的简单方法?
e.g。
//following is pseudo code
If(Current.User.Role == 'Admin')
{
return IAssetsForAdmin;
}
else
{
return IAssetsForGeneralUser;
}
Interface IAssetForAdmin
{
Add();
Edit();
Flag();
}
Interface IAssetForGeneralUser
{
Flag();
}
答案 0 :(得分:1)
这是不可能的。您不能为每个用户角色返回不同的合同。此外,它不仅与WCF相关,而且与整个Web服务体系结构和.NET体系结构相关,因为定义新契约=定义新服务引用=重新编译应用程序。
但这可以通过基于角色的安全性轻松解决。经过身份验证的用户将成为某个角色的成员,该角色将被允许仅执行选定的操作。要实现此目的,请谨慎使用PrincipalPermission(对于命令式权限要求)或PrincipalPermissionAttribute(对于声明性权限请求)。如果未经授权的用户调用安全方法,则会抛出SecurityException。您唯一需要的是正确配置WCF安全模型,以便将角色分配给经过身份验证的用户。