【问题标题】:WCF FaultException Without Sending StackTrace没有发送 StackTrace 的 WCF FaultException
【发布时间】:2010-10-28 19:09:04
【问题描述】:

我有一些具有预定义 FaultContract 属性的 WCF 服务。当FaultException<TDetail> 异常被抛出时,它们会发送 StackTrace、Source 和其他可能未保存的信息。

是否可以只返回:

  • 详细信息(来自通用 TDetail)
  • 故障消息
  • 故障代码
  • (也可能)故障原因

【问题讨论】:

    标签: wcf stack-trace soapfault faultexception


    【解决方案1】:

    您是否尝试过使用IErrorHandler 滚动您自己的错误异常?还要确保在您的应用配置文件中,IncludeExceptionDetailInFaults 属性设置为 false,this 可能有助于最佳实践。

    【讨论】:

    • IncludeExceptionDetailInFaults 已经为假。据我了解,IncludeExceptionDetailInFaults 仅适用于尚未属于 FaultException 类型的未处理异常。我已经实现了一个 IErrorHandler 以强制执行一项策略,即所有操作都分配了一个基本 FaultContract 并自动记录并重新抛出该基本错误类型中未处理的异常。我不知道为什么 WCF 传递的信息比定义的更多故障合同。我目前正在使用 wsHttpBinding 和 SOAP 客户端遇到这种行为。
    • 事实证明,将 StackTrace 发送回客户端没有问题。 (问题出在键盘前面。)我在“响应”窗格中误解了从 WCFStorm 收到的响应。 stacktrace 和 source 只是关于客户端的信息,而不是关于服务器的信息。 IncludeExceptionDetailInFaults 绝对只适用于不是“众所周知”的异常。感谢特伦斯的帮助。
    • 感谢您关注此@reifnir,您让我免于浪费大量时间试图弄清楚如何防止这种情况!
    • 是的,这很令人困惑,尤其是因为即使使用 IncludeExceptionDetailInFaults=false,堆栈跟踪也会显示“服务器堆栈跟踪:...”,尽管实际上它只是客户端堆栈跟踪。
    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2016-01-26
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多