WCF IErrorHandler.ProvideFault()行为

时间:2010-11-27 20:43:41

标签: wcf error-handling ierrorhandler

我的服务方法标有PrincipalPermissionAttribute,我的服务附加了自定义IErrorHandler实现。当传入请求没有执行权限时,抛出方法System.Security.SecurityException。然后触发IErrorHandler.ProvideFault(),我想提供一个特殊的错误。但error参数不是原始异常,它是无类型FaultException。此外,error.InnerException为空,尽管我在配置中有以下设置:

<serviceDebug includeExceptionDetailInFaults="true"/>

为什么呢?我怎样才能达到预期的行为?

1 个答案:

答案 0 :(得分:1)

根据this SecurityException对WCF来说有点“特殊”:

  

SecurityException与CAS有关   (代码访问安全性),它是一个   致命的例外。既然这个例外   与任何服务模型无关   例外,它无法处理   IErrorHandler。

所以我最后创建了一个额外的类,哪些方法(从实现服务接口的类的方法调用)用PrincipalPermissionAttribute标记,处理函数用try / catch标记。