【问题标题】:Unable to debug WCF service in VS2008 after UserNamePasswordValidator faultUserNamePasswordValidator 故障后无法在 VS2008 中调试 WCF 服务
【发布时间】:2009-07-20 15:04:04
【问题描述】:

我有一个 WCF 服务,我使用自定义 UserNamePasswordValidator 和在 wsHttpBinding 上运行的消息安全性来保护它。发布代码效果很好。不幸的是,当我在以前使用无效凭据(当前凭据有效!)之后尝试在调试模式下运行时,VS2008 会显示一个烦人的对话框(更多内容见下文)。

验证器中我的 Validate 方法的简化版本可能如下所示:

    public override void Validate(string userName, string password)
    {
        if (password != "ABC123")
            throw new FaultException("The password is invalid!");
    }

客户端收到一个 MessageSecurityException,其中 InnerException 设置为我明确抛出的 FaultException。这是可行的,因为我的客户端可以显示我希望用户看到的原始 FaultException 的消息文本。

不幸的是,在所有后续的服务调用中,VS2008 都会显示“无法自动调试...”对话框。我可以阻止这种情况发生的唯一方法是退出 VS2008,重新进入并使用正确的凭据连接到我的服务。我还应该补充一点,即使我在每次通话中都创建了一个全新的代理,也会发生这种情况。拨打电话时,我的频道不可能出现故障。但是,VS2008 很可能会挂在先前出现故障的通道上并尝试将其用于调试目的。

不用说,这很糟糕!我输入“坏”凭据的全部原因是为了测试“坏凭据”处理。

无论如何,如果有人对我如何解决这个错误有任何想法(?!?)我会非常感激......

【问题讨论】:

  • 不是一个答案,但是通过让您的服务返回一个包含将显示给用户的消息的故障,您已经将您的服务与您的 UI 耦合。另外,仅供参考,切勿通过告诉黑客密码无效来告诉黑客用户名有效。说“用户名或密码无效”。
  • 您能描述一下您是如何清理代理的吗?此外,完全不相关,但使用异常传播返回值通常不是一个好主意。您应该为特殊情况保留例外,而不仅仅是用户没有输入正确的用户名/密码。

标签: c# wcf


【解决方案1】:

我开始认为问题与代理关闭有关。我刚刚看到 Michele Leroux Bustamante (http://wcfguidanceforwpf.codeplex.com) 的一组出色的 WCF 视频,这让我认为问题可能出在我的客户端代码中。我今天会试一试,然后报告它是如何做的......

【讨论】:

  • 好的,我终于弄清楚发生了什么。基本上,我遇到了没有及时关闭客户端代理的问题(即让代理被垃圾收集关闭)。请参阅wcfproxygenerator.codeplex.com 以获得该问题的良好解决方案...
猜你喜欢
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2014-05-02
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2012-09-14
相关资源
最近更新 更多