【问题标题】:Is it possible to configure a WCF service client to throw a custom FaultException?是否可以配置 WCF 服务客户端以引发自定义 FaultException?
【发布时间】:2013-03-17 13:56:28
【问题描述】:

我想知道是否可以将 WCF 服务客户端配置为在抛出错误时使用自定义类型而不是 FaultException。自定义类型将继承自 FaultException,但还会包含有关错误的一些其他详细信息。

我想使用自定义 FaultException 的原因是我可以存储 SOAP 标头中的 GUID,否则会丢失。

我知道我可以手动捕获并重新抛出服务客户端返回的任何错误,但这很脆弱。我无法保证未来的开发者也会这样做。

我考虑过对生成的服务客户端类进行子类化并将错误处理放在其中,但是每当目标服务发生更改时,都会产生大量工作。

那么,是否可以配置 WCF 服务客户端为故障抛出自定义的 FaultException 类型?

【问题讨论】:

  • 你看过Fault Contracts吗?
  • 如果我对 FaultContracts 的理解是正确的,那么它们是在服务端定义的。在我的特殊情况下,我无权访问服务端。我正在尝试获取当前的故障并用 SOAP 标头数据修饰它们(主要是因为我无法影响服务抛出的实际故障中的内容)。我错了吗?

标签: wcf error-handling wcfserviceclient


【解决方案1】:

您可以创建自己的 IErrorHandler 实现:

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx

覆盖 ProvideFault,然后将常规异常(包括普通 FaultException)转换为您自己的基于自定义的 FaultException<T>,其中 T 是您自己的类型,您可以定义它以包含自定义属性。

之后,您必须将 IErrorHandler 的实现注册为服务行为,无论是在代码中还是在 web/app 配置中。

【讨论】:

  • 听起来很有希望。谢谢。我明天上班时试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多