我的服务方法标有PrincipalPermissionAttribute
,我的服务附加了自定义IErrorHandler
实现。当传入请求没有执行权限时,抛出方法System.Security.SecurityException
。然后触发IErrorHandler.ProvideFault()
,我想提供一个特殊的错误。但error
参数不是原始异常,它是无类型FaultException
。此外,error.InnerException
为空,尽管我在配置中有以下设置:
<serviceDebug includeExceptionDetailInFaults="true"/>
为什么呢?我怎样才能达到预期的行为?
答案 0 :(得分:1)
根据this SecurityException
对WCF来说有点“特殊”:
SecurityException与CAS有关 (代码访问安全性),它是一个 致命的例外。既然这个例外 与任何服务模型无关 例外,它无法处理 IErrorHandler。
所以我最后创建了一个额外的类,哪些方法(从实现服务接口的类的方法调用)用PrincipalPermissionAttribute
标记,处理函数用try / catch标记。