如何防止“请求主体权限失败”导致 WCF 客户端出错?
Posted
技术标签:
【中文标题】如何防止“请求主体权限失败”导致 WCF 客户端出错?【英文标题】:How to prevent 'Request for principal permission failed' from faulting WCF client? 【发布时间】:2012-05-15 06:41:25 【问题描述】:我有一个包含多个操作的 WCF 服务。 每个操作都有“PrincipalPermission”标签,如下所示:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public ProductsDto GetAllProducts()
// Do operation here ...
问题是 - 如果用户不是“Administratir”角色的一部分 - 服务会引发异常
请求主体权限失败
这会将客户端的通道破坏为“故障”状态。
我希望能够以某种方式捕捉到这一点并向客户端发送“故障”消息,
让客户知道他试图做他不应该做的事情,而不会导致通道出错!
我尝试在操作中使用“try-catch”块,但没有帮助。 异常发生在操作本身的“外部”。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:有一个特殊的接口IErrorHandler
,您可以实现它并与 WCF 服务挂钩以处理异常。使用IErrorHandler
可以让您处理安全异常和序列化代码抛出的任何异常。
关于客户端通道进入故障状态的另一个说明:我建议为您从客户端执行的每个工作单元创建一个新的客户端对象。重用客户端对象会解决这类问题。
【讨论】:
我不想为每个请求打开一个客户端,因为还有一个每 60 秒发生一次的轮询机制,而且 - 客户端需要提供用户名和密码,而我没有不想将它们存储在客户端的内存中。您能否详细说明 IErrorHandler 如何解决我的问题?如何捕获 PRINCIPAL 错误并向客户端发送适当的消息而不出错?以上是关于如何防止“请求主体权限失败”导致 WCF 客户端出错?的主要内容,如果未能解决你的问题,请参考以下文章