将异常作为WCF中响应的一部分传递

时间:2010-02-22 21:58:20

标签: c# wcf serialization exception

我的应用程序中有一些非常规的异常使用。如果方法中发生异常,我将其作为结果对象的一部分传递,如下所示:

public class MethodResponse
{
  public List<Exception> Errors {get; set;}
  public int SomeResult {get; set;}
}

现在,我正在使用WCF分离业务层和UI层,我遇到了一个问题 - WCF不喜欢Exception对象,如果错误列表中存在一个,它会崩溃服务。我做了一些研究,看起来WCF无法序列化Exception类。

有解决方法吗?

2 个答案:

答案 0 :(得分:6)

你需要记住一个大问题:WCF应该是可互操作的 - .NET异常不是 - 那些只是.NET。 Java或Ruby将无法处理您的异常....

您在WCF服务器和客户端之间传递的任何内容都必须是XML可序列化的。所以基本上,你需要做的是将这些异常包装成可互操作的SOAP故障 - 这些故障确实是可互操作和可序列化的。或者您需要定义自己的“WCFError”类型,它封装了.NET异常所需的所有信息 - 例如错误代码,错误消息等 - 并且在您的WCF服务器上,实现IErrorHandler接口并转换所有.NET异常进入您自己的错误类的实例并将其传递回调用者。

希望至少有一点帮助 - 没有灵丹妙药 - 你只需要知道WCF能够和不能处理什么 - 以及为什么。

答案 1 :(得分:2)

您可能需要考虑您所采用的方法是否正确。异常在.NET Framework中具有特定用途;它们不是为数据传输对象而设计的。您需要哪些与业务层之间转移到UI层的异常相关的信息?您可能需要考虑创建一个DTO Error类,其中包含您需要传输的每个异常的信息,然后返回DTO错误对象的List。