我有一个WCF服务,有几个操作 . 每个操作都有'PrincipalPermission'标记,如下所示:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public ProductsDto GetAllProducts()
{
// Do operation here ...
}
问题是 - 如果用户不是角色'Administratir'的一部分 - 该服务会抛出异常
Request for principal permission failed
这会破坏客户的渠道为“故障”状态 .
我希望能够以某种方式捕获这个并向客户端发送“故障”消息,
所以客户知道他试图做他不应该做的事情,而不会让渠道出错!
我尝试在操作中使用'try-catch'块,但它没有帮助 . 该异常发生在操作本身的“外部” .
我怎么解决这个问题?
1 回答
有一个特殊的接口IErrorHandler,您可以实现并与WCF服务连接以处理异常 . 使用
IErrorHandler
将允许您处理安全性异常和序列化代码抛出的任何异常 .关于客户端通道陷入故障状态的另一个注意事项:我建议为您从客户端执行的每个工作单元创建一个新的客户端对象 . 重用客户端对象可以解决此类问题 .