【问题标题】:Unable to capture fault exception in client WCF app无法在客户端 WCF 应用程序中捕获故障异常
【发布时间】:2018-06-22 01:41:26
【问题描述】:

我正在使用使用 WCF 用 java 制作的 Web 服务,但我无法捕获错误异常。每次我向服务发送肥皂请求时,我也会收到一个常规异常:

从另一方收到不安全的错误或不正确的安全故障。故障代码及详情见内部故障异常。

当我进入内部异常时,只有带有故障对象类型名称的字符串(顺便说一句,这是我从 wsdl 代理类创建的类型),无法查看内部异常。我还使用提琴手来查看我发送的请求和来自网络服务的响应。这实际上是从中查看错误消息的唯一方法。我需要做的是在我的应用程序代码中捕获此消息。我试图在我的代码中捕获 FaultException,但没有成功(它甚至没有击中它)。我将不胜感激任何帮助

        try {
            client.Open();
            SkrytkaReference.OdpowiedzSkrytkiTyp response = new SkrytkaReference.OdpowiedzSkrytkiTyp();

            SkrytkaReference.DokumentTyp dokument = new SkrytkaReference.DokumentTyp();

            dokument.nazwaPliku = model.Dokument.nazwaPliku;
            dokument.typPliku = model.Dokument.typPliku;
            dokument.zawartosc = model.Dokument.zawartosc;

            response = client.nadaj(model.IdentyfikatorPodmiotu, model.AdresSkrytki, model.AdresOdpowiedzi, true, model.DaneDodatkowe, dokument);
            /// abcprospzoo/Domyślna-1504592390539
            client.Close();
        }

        catch (FaultException<SkrytkaReference.WyjatekTyp> faultex) {
            var msgFault = faultex.CreateMessageFault();

            if (msgFault.HasDetail) {
                var detailNode = msgFault.GetDetail<XmlElement>();
            }
        }

【问题讨论】:

  • 您是否为您的 WCF 尝试过全局错误处理程序? stackoverflow.com/questions/747011/…
  • 感谢您的回复。我已经向我的客户端类实例添加了诸如客户端消息检查器之类的行为,我可以看到它进入了 BeforeSendRequest 方法,但它没有进入 AfterReceiveReply 方法。正如你所说,我还添加了 IErrorHandler 服务,但它不能正常工作:/ 看起来我什至无法捕捉到服务的响应。它直接进入异常并给出关于不安全或不正确安全故障错误的错误
  • 我已经看到了这些错误 a) 客户端没有使用 TLS 1.2(服务器需要)。或 b) IIS 帐户丢失/过期/不允许的握手/身份验证证书。检查您的 NT 事件日志。有时,它们包含更好/更详细的消息。

标签: wcf


【解决方案1】:

最后我得到了这个工作。如果其他人有类似的问题,这里有一个解决我的问题的修复: link

在 nuronce 的回复中。该解决方案消除了传入服务响应的安全性。从现在开始,我可以在我的 c# 代码中捕获服务响应和故障(在常规 FaultException 中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多