我有一个 WCF 服务配置为通过 System.IdentityModel.Selectors.UserNamePasswordValidator 类的重写 Validate() 方法使用自定义用户名验证。
合同的所有方法都已使用 FaultContractAttribute 进行修饰,以将自定义 SOAP 错误指定为可返回。
当抛出 FaultException<T>(其中 T 是 FaultContractAttribute 中指定的类型)时,一切都按预期运行,并且我在响应 XML 中得到了自定义错误。
但是,如果我尝试在用户名身份验证类的重写 Validate() 方法中抛出 FaultException<T>,我会得到一个通用 SOAP 错误,原因如下:
“此故障的创建者没有指定原因。”
但是,如果我更改代码以引发一般 SOAP 错误,如下所示:
throw new FaultException("Authentication failed.");
我至少会得到“身份验证失败”。在原因元素中。
我的问题是:
- 如果在 Validate() 中抛出 FaultException<T> 异常,为什么它们在服务实现中的处理方式不同?
- Validate() 方法中抛出的异常是否符合合同方法上指定的 FaultContractAttribute?
非常感谢任何帮助。我自己的猜测是,身份验证发生在消息与合同的任何方法相关联之前,因此与 FaultContractAttribute 无关,但任何确认这一点并提供解决方法的文章都会非常有用。
大理