【问题标题】:WCF Service Authentication. Error is never returned when credentials is wrongWCF 服务身份验证。凭据错误时永远不会返回错误
【发布时间】:2014-04-30 07:38:38
【问题描述】:

我正在编写一个非常简单的带有用户名/密码身份验证的 WCF 服务。我的用户名/密码验证器代码如下所示:

public class InvoiceServiceUserValidation : UserNamePasswordValidator
{
    public override void Validate(string userName, string password)
    {
        if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
        {
            throw new SecurityTokenException("Username and password required");
        }

        if (InvoiceServiceHelper.AuthenticateUser(userName, password)) return;

        throw new FaultException("Could not authenticate - Unknown reason");

    }
}

如果我提供正确的用户名和密码,一切正常,操作继续。当我提供错误的密码时,hover,异常永远不会返回,所以我的客户只是在它超时之前呆在那里等待。

我已经调试过,所以我知道当它出错时,实际上已经到达了带有“throw new FaultException”的行,但仍然没有给客户答复。

非常感谢您的帮助

【问题讨论】:

    标签: c# wcf wcf-security


    【解决方案1】:

    您需要为 wcf 打开登录。一旦东西通过了代码的边缘,您就无法直接调试,但是日志记录将使您更深入地解决问题。尤其是当你开始使用拦截的时候。

    How to turn on WCF tracing?

    当你有这个时,你可以查看日志并弄清楚到底发生了什么。 如果您仍然无法弄清楚,建议您提出一个新问题,否则这将被搁置。

    你的前端是什么。是银光吗?

    您说它正在超时 - 将超时时间增加到 10 分钟之类的傻事。是否立即超时。

    连接是否被中止,故障代码是 500 吗? 启动提琴手

    【讨论】:

    • 在我看来,在跟踪中抛出了异常,但客户端仍然没有收到它。有一点机会我不知道如何读取跟踪文件,但是
    • 是的,他们很难。你可以在边界的两侧得到痕迹。
    • 如何在客户端获取跟踪信息? app.config 中的相同配置行?
    • 基本上是的。我已经有一年多没有玩 wcf 了,所以手头没有任何示例文件。我只需要谷歌它。在这里搜索我敢打赌大约有 50 个问题在问完全相同的事情。例如stackoverflow.com/questions/17591169/…
    • 跟踪中没有任何东西可以帮助我,我唯一能看到的是客户端没有捕获到错误......
    【解决方案2】:

    我不知道为什么,但是当我切换到 wsHttpBinding(来自 wsDualHttpBinding)时,它开始工作了。这不是一个真正的解决方案,而是一个解决方法,但它为我解决了它。

    如果其他人也遇到同样的问题,可能就是这种情况。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2021-07-01
      • 2015-06-01
      • 2011-02-16
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多