gpt4 book ai didi

WCF用户名身份验证和故障契约(Contract)

转载 作者:行者123 更新时间:2023-12-04 03:38:13 24 4
gpt4 key购买 nike

我有一个WCF服务配置为通过System.IdentityModel.Selectors.UserNamePasswordValidator类的重写Validate()方法使用自定义UserName验证。

契约(Contract)的所有方法均已用FaultContractAttribute装饰,以将自定义SOAP错误指定为可返回。

当抛出FaultException 时(其中T是FaultContractAttribute中指定的类型),一切都按预期方式运行,并且我在响应XML中获得了自定义错误。

但是,如果我尝试在用户名身份验证类的重写Validate()方法中抛出FaultException ,则由于以下原因,我将收到一般性的SOAP错误:

“此故障的创建者未指定原因。”

但是,如果我更改代码以引发一般的SOAP错误,如下所示:

throw new FaultException("Authentication failed.");

我至少会得到“身份验证失败”。在原因元素中。

我的问题是:

  • 如果将FaultException 异常与服务实现中的异常一起抛出到Validate()中,则为什么不将它们视为相同?
  • 是否有可能使Validate()方法中引发的异常符合契约(Contract)方法上指定的FaultContractAttribute?

  • 任何帮助,不胜感激。我自己的猜测是,身份验证先于消息与契约(Contract)的任何方法相关联,因此与FaultContractAttribute不相关,但是任何确认此问题并给出解决方法的文章将非常有用。

    塔里语

    最佳答案

    这有点烦人,但我通过以下方法解决了这个问题:

    SecurityTokenValidationException stve
    = new SecurityTokenValidationException(“无效的用户名或密码”);
    抛出新的FaultException (stve,stve.Message);

    另外包含该消息意味着您不会收到愚蠢的“未指定原因”消息。

    关于WCF用户名身份验证和故障契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322743/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com