【问题标题】:WCF - how to make custom errors?WCF - 如何制作自定义错误?
【发布时间】:2023-03-27 07:45:01
【问题描述】:

我有一个 WCF REST 项目,我想捕捉 WCF 框架抛出的错误并以我的方式显示它们(即 JSON)。

例如,如果我在调用中期待一个 int 参数并且我得到一个字符串,那么框架将显示一个带有“请求错误”和一些跟踪信息的页面......我只想得到异常并以我的 JSON 格式显示为对用户的响应。

只是为了让这一点更清楚 - 我不想在代码中捕获异常,而是在代码之外发生异常。 WCF 会自己生成的异常,例如(当我将字符串传递到 int 字段时)

服务器在处理请求时遇到错误。请参阅服务帮助页面以构建对服务的有效请求。异常消息是“输入字符串的格式不正确。”。有关更多详细信息,请参阅服务器日志。异常堆栈跟踪是:...

有什么想法可以做到这一点吗?

提前非常感谢!

【问题讨论】:

  • 我不明白...您是在问如何捕获异常,或者如何在 ASP 中显示“漂亮”的错误页面?请更好地标记您的问题。
  • 你是对的。我添加了一点解释
  • 异常通过 WCF 传递...如果您在 WCF 服务中抛出异常,您可以在客户端代码中捕获它。我还是不明白这里的问题是什么。
  • 这不是我抛出的异常。这是 WCF 抛出的异常(例如参数错误) - 我想捕获它并返回我自己的结果,而不是它返回的默认 WCF 错误(甚至在它到达我的代码之前,所以我可以捕获它)跨度>
  • 您应该在您的服务方法中进行自己的验证或尝试/捕获,以便您可以准确控制抛出的异常(如果有),然后您可以正确编码您的客户端。 -- 那,或者您可以使用 try/catch 将您的 WCF 调用包装在您的客户端中并打印出一个通用的“漂亮”错误消息。但听起来你没有做一些验证或其他你应该做的事情。

标签: c# .net wcf


【解决方案1】:

您需要使用 FaultContracts 来生成您自己的自定义错误。设置需要一些时间,但一旦你拥有它,它就会产生奇迹。它的好处是 FaultContract 是完全可序列化的。

[OperationContract]
[FaultContract(typeof(CustomFault))]
string WillThrowArgumentException();

这里有一个很好的解释让它工作。
http://blog.ngommans.ca/index.php?/archives/33-Handling-custom-errors-in-WCF.html

【讨论】:

    【解决方案2】:

    听起来您希望在 WCF 服务中实现全局错误处理,因此您可以捕获未处理的异常(代码中的意外错误或您无法控制的错误)。如果我的理解是正确的,您将需要查看IErrorHandler Interface

    有许多关于如何实现 IErrorHandler 的博客文章和文章。这是涵盖 SOAP 和 REST 的一个:WCF Exception Handling with IErrorHandler

    【讨论】:

    • 谢谢 - 我会去的 :) 你真的帮了大忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多