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

And*_*rey 2 c# wcf serialization exception

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

public class MethodResponse
{
  public List<Exception> Errors {get; set;}
  public int SomeResult {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

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

有解决方法吗?

mar*_*c_s 6

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

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

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