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