【问题标题】:How to handle exceptions on WCF Custom Authentication?如何处理 WCF 自定义身份验证的异常?
【发布时间】:2011-09-17 22:56:25
【问题描述】:

我有一个 WCF 服务配置为通过系统的重写 Validate() 方法使用自定义用户名验证。 IdentityModel.SelectorsUserNamePasswordValidator类。

当验证失败时,我抛出一个SecurityTokenValidationException

它的构建方式,在我的客户端中,我收到了一个带有消息的CommuinicationException:远程服务器返回一个错误:NotFound。

在客户端处理此异常的最佳方法是什么?

我的验证码:

if (user == null || (Environment.TickCount - user.LastCall) > 300000)
{
    if (!LoginUser.ValidateUser(userName, password))
    {
        throw new SecurityTokenValidationException("Usuário/Senha inválido");
    }
}

【问题讨论】:

    标签: wcf authentication exception-handling


    【解决方案1】:

    您如何识别您检查最后一次调用的用户对象?你在使用 LINQ Single 调用吗?如果是这样,如果找不到用户,这将引发异常,因此服务器将在此时中止身份验证,而不是使用 SecurityTokenValidationException ,我认为这会给你你所看到的行为

    【讨论】:

      【解决方案2】:

      从服务中抛出异常会(我相信)导致通道出错,并且客户端将收到一条非描述性消息。这是设计使然 - WCF 在服务端“隐藏”异常。

      要向客户端返回错误以便客户端可以处理它,您应该使用 FaultException。您可以为操作指定一个 FaultContract,并将其返回给客户端。

      搜索一下 WCF 中的错误处理,您应该会得到很多示例。我的时间不多,或者我会补充一些,但希望这会让你找到正确的方向。

      编辑添加

      换行

      throw new SecurityTokenValidationException("Usuário/Senha inválido");
      

      throw new FaultException("Usuário/Senha inválido");
      

      抛出 FaultException 将防止通信出现故障 - 客户端然后可以接收异常,知道这是由于验证失败,并决定从该点做什么(重试,提示用户重新输入凭据等) .

      这是一个非常简单的更改,示例是为了说明这一点。我在下面发布的链接将提供更详细的信息。

      猜你喜欢
      • 1970-01-01
      • 2019-09-18
      • 2010-09-16
      • 2014-04-26
      • 2017-03-06
      • 2013-03-28
      • 2019-09-30
      • 2016-03-25
      相关资源
      最近更新 更多